为什么我对未分配的内存有读写权限?

use*_*376 3 c c++

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

我已经声明了一个char指针,并将其指向已分配大小的内存位置(1*sizeof(char)).

char *src ;
src = (char*)malloc(1 * sizeof(char));
strcpy(src,"Copy text");
Run Code Online (Sandbox Code Playgroud)

即使我只分配了内存,1*sizeof(char)我也可以成功复制整个字符串,并且我对整个内存区域"Copy text"都有读写权限.

即下面的代码打印修改后的值.它打印出来"Copy RRxt".

src[5] = 'R';
src[6] = 'R';
printf("%s \n" , src);
Run Code Online (Sandbox Code Playgroud)

所以我很困惑为什么我没有"Segmentation fault"在上面的代码片段上得到错误.

注意:我正在使用GCC编译器v4.6.3

Val*_*ier 15

这是因为malloc作品chunks of 16 or 32 bytes,因为这种策略使得内存访问更加高效.因此,当你分配1 bytenext 15 bytes5月可能是你的.

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

  • 我想指出,malloc实际上并没有进行内存分配; 它是操作系统内核提供的任何API的管理前端,用于分配地址空间.(Windows上的sbrk和mmap,Windows上的VirtualAlloc).一个重要的警告是,地址空间必须以"页面"的大小分配,通常是4kiB. (4认同)