C中的内存分配

the*_*edp 6 c malloc buffer-overflow windows-vista

我有一个关于内存分配顺序的问题.在下面的代码中,我在循环中分配4个字符串.但是当我打印地址时,它们似乎并没有一个接一个地分配......我做错了什么,或者是OS实施的某种防御机制,以防止可能的缓冲区溢出?(我使用Windows Vista).

谢谢.

 char **stringArr;
 int size=4, i;

 stringArr=(char**)malloc(size*sizeof(char*));
 for (i=0; i<size; i++)
    stringArr[i]=(char*)malloc(10*sizeof(char));

 strcpy(stringArr[0], "abcdefgh");
 strcpy(stringArr[1], "good-luck");
 strcpy(stringArr[2], "mully");
 strcpy(stringArr[3], "stam");

 for (i=0; i<size; i++) {
  printf("%s\n", stringArr[i]);
  printf("%d  %u\n\n", &(stringArr[i]), stringArr[i]);
 }
Run Code Online (Sandbox Code Playgroud)

输出:

abcdefgh 9650064 9650128

祝你好运9650068 9638624

mully 9650072 9638680

stam 9650076 9638736

Gre*_*ill 7

通常,当您通过请求内存时malloc(),C运行时库会将请求的大小舍入到某个最小分配大小.这可以确保:

  • 运行时库有其记账信息的空间
  • 运行时库管理分配的块的效率更高,这些块都是某个大小的倍数(例如16个字节)

但是,这些是实现细节,您不能真正依赖于任何特定的行为malloc().