qey

Atitude is Everything.-- 关注C/C++,关注Linux(Unix) ,关注网络。 Better Late Than Never.
随笔 - 4, 文章 - 13, 评论 - 7, 引用 - 0
数据加载中……
实际上不用管那么多,可以认为函数返回一个值,这个值就是string类型;主要是因为string和char[] 有很大不同,char[]数据处于栈区,而string 的数据是处于堆区(new ??)。
re: 内存覆盖问题 无声无色 2008-11-11 19:59
release 模式下是可以有 静态常量数据区 的数据的修改操作的!
debug 模式是不允许的,会提示内存非法操作错误错误!
re: 内存覆盖问题 无声无色 2008-11-11 19:43
另外需要说明的是:这个例子中的str1 和str2 都是指向静态数据区的字符串的;在bebug 模式下,运行会出错;如果是release 模式,就可以通过,而产生内存覆盖。

首相看一下release 模式下,栈区数据;
如果定义的数据是在栈区会是什么效果呢?
char bb[]="123456789";
char aa[]="56789";
strcpy(bb,aa);
cout<<aa<<endl;
cout<<bb<<endl;
结果
123456789
9
char aa[]="56789";
char bb[]="123456789";
strcpy(bb,aa);
cout<<aa<<endl;
cout<<bb<<endl;
结果
123456789
9
应该是在release 模式下做了优化,编译器先分配aa,后在分配bb 的空间的缘故!

而在debug 模式下,并没有优化,而是按照声明的先后顺序来安排栈空间;
所以在debug 模式下的输出有点不同;
char aa[]="56789";
char bb[]="123456789";
strcpy(bb,aa);
cout<<aa<<endl;
cout<<bb<<endl;
结果
123456789
123456789
冲毁了一个栈区的dword,只是侥幸那里没有数据而没有出错!

re: 内存覆盖问题 无声无色 2008-11-11 18:50
【编译器为:VC 6.0】
有人说编译优化了,也许吧,可是多加一些数据的时候,就感觉排序有点混乱了!!
char* str1="56789";
char* str2="123456789";
char* str2="1234";

在静态数据区 内存中分配就如下:
00471084 31 32 33 34 1234
00471088 00 00 00 00 ....
0047108C 35 36 37 38 5678
00471090 39 00 00 00 9...
00471094 31 32 33 34 1234
00471098 35 36 37 38 5678
0047109C 39 00 00 00 9...

再加多一些呢??
char* str2="123456789";
char* str1="56789";
char *str3 = "1234";
char *str4 = "123";
char *str5 = "12";
char *str6 = "123456";
char *str7 = "12345678901";
在静态数据区 内存中分配就变成如下:
00471064 31 32 33 34 1234
00471068 35 36 37 38 5678
0047106C 39 30 31 00 901.
00471070 00 00 00 00 ....
00471074 31 32 33 34 1234
00471078 35 36 00 00 56..
0047107C 31 32 00 00 12..
00471080 31 32 33 00 123.
00471084 31 32 33 34 1234
00471088 00 00 00 00 ....
0047108C 35 36 37 38 5678
00471090 39 00 00 00 9...
00471094 31 32 33 34 1234
00471098 35 36 37 38 5678
0047109C 39 00 00 00 9...
static 定义的int静态变量在没有赋值时,系统自动赋值0;other函数里,作为静态局部变量a,b,具有全局寿命,局部可见,但是只在第一次进入函数时被初始化。出了other函数之后,函数里面的静态局部变量a,b不可见。当第二次调用other函数时,不初始化,都是用第一次调用other函数之后得到的a,b的值。

但是我还是不明白它们的物理上的存贮是怎么样的?难道同样是静态变量a,它们在物理的存储空间不同吗??
细细看它各个变量的寿命域和可见域,有一定启示!
re: 数据结构复习--归并排序 无声无色 2006-04-07 23:36
开始我的C++博客路