我对以下代码段的行为感到困惑,
我已经声明了一个char指针,并将其指向已分配大小(1 * sizeof(char))的内存位置。
char *src ;
src = (char*)malloc(1 * sizeof(char));
strcpy(src,"Copy text");
即使我只分配了内存,1*sizeof(char)
我也可以成功复制整个字符串,而且我也获得了"Copy text"
存在的整个内存区域的读写权限。
即下面的代码打印修改后的值"Copy RRxt"
。即,它打印。
src[5] = 'R';
src[6] = 'R';
printf("%s \n" , src);
所以我很困惑为什么我没有"Segmentation fault"
在上面的代码片段中出现错误。
注意:我使用的是GCC编译器v4.6.3
这是因为malloc
有效,chunks of 16 or 32 bytes
因为此策略使内存访问更加有效。因此,当您分配时1 byte
,next 15 bytes
可能是您的。
但是,我不建议您知道这种技巧,而是正确分配正确数量的字节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句