VC++6.0 内存管理的奇怪现象
#include<iostream>using namespace std;
#define N_ADD 2
void main()
{
char s[]="123",*p=s;
while(*p)
p++;
for(int i=0;i<N_ADD;i++)
{
*p='4';
p++;
}
*p=0;
cout<<s<<endl;
}
系统给s分配的空间应该是4字节,按理是不能在字符串s尾部添加字符的,但我用指针p强行添加字符后,编译通过,运行时出现奇怪现象,就是根据字符串s的初始化大小不同,N_ADD(在s末尾插入的字符个数)可以允许的值也不同:
如当s含3个字符时,N_ADD=1,程序正常结束,而2,3,4,5,...,9都不行,但100却可以!而且N_ADD=5时会循环输出s!
当s含0个字符时,N_ADD可以等于1~4,不能等于5~10,却可以等于100,101,102!
望各位高手解释一下原因。
谁能给我讲讲操作系统和编译器是怎样管理内存的?
望不吝赐教。
[[it] 本帖最后由 CrystalFan 于 2009-8-3 20:01 编辑 [/it]]