为什么我在未分配的内存上获得读写权限?

时间:2014-07-19 09:02:47

标签: c++ c

我对以下代码段的行为感到困惑,

我已经声明了一个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

1 个答案:

答案 0 :(得分:15)

这是因为mallocchunks of 16 or 32 bytes工作,因为此策略使内存访问更有效。因此,当您分配1 byte时,next 15 bytes可能是您的。

但是我不建议作弊知道这个技巧,但正确分配正确的字节数。