我对以下代码段的行为感到困惑,
我已经声明了一个char指针,并将其指向已分配大小的内存位置(1 * sizeof(char))。
char *src ;
src = (char*)malloc(1 * sizeof(char));
strcpy(src,"Copy text");
即使我只分配了1*sizeof(char)
的内存,我也可以成功复制整个字符串,并且我在"Copy text"
存在的整个内存区域获得了读写权限。
即下面的代码打印修改后的value.ie,它会打印"Copy RRxt"
。
src[5] = 'R';
src[6] = 'R';
printf("%s \n" , src);
所以我很困惑为什么我没有在上面的代码段上收到"Segmentation fault"
错误。
注意:我正在使用GCC编译器v4.6.3
答案 0 :(得分:15)
这是因为malloc
由chunks of 16 or 32 bytes
工作,因为此策略使内存访问更有效。因此,当您分配1 byte
时,next 15 bytes
可能是您的。
但是我不建议作弊知道这个技巧,但正确分配正确的字节数。