- #include <iostream>
-
#include <string.h>
-
#include <stdlib.h>
-
#define OK 0
-
using namespace std;
-
void stackone();
-
void stacktwo();
-
int main(int argc ,char ** argv){
-
cout<<"注意栈中变量的地址分配方式:变量按定义的顺序从高地址(栈底)像低地址(栈顶)分配"<<endl;
-
cout<<"这个两个程序都是有问题的,一个隐式地址越界,一个显示地址越界"<<endl;
-
stackone();
-
stacktwo();
-
system("pause");
-
return OK;
-
}
-
void stackone(){
-
char s[]="123456789";
-
char d[]="123";
-
strcpy(d,s);
-
cout<<" the string d is\t"<<d<<endl;
-
cout<<" the string s is\t"<<s<<endl;
-
}
-
void stacktwo(){
-
char d[]="123";
-
char s[]="123456789";
-
strcpy(d,s);
-
cout<<" the string d is\t"<<d<<endl;
-
cout<<" the string s is\t"<<s<<endl;
-
}
注意: 在给参数分配地址时,自由向左分配的,而变量是按定义的顺序
栈空间一般是从高地址向低地址扩展,至少在我的测试平台上,winxp
这两个程序的都是有问题的,主要原因是目的地址分配的空间太少,而导致地址越界
阅读(1122) | 评论(0) | 转发(0) |