我有一个关于内存分配顺序的问题。
在下面的代码中,我循环分配了4个字符串。
但是,当我打印地址时,它们似乎没有一个接一个地分配……我是在做错什么,还是操作系统实现了某种防御机制,以防止可能的缓冲区溢出? (我使用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]);
}
输出:
最佳答案
通常,当您通过malloc()
请求内存时,C运行时库会将请求的大小四舍五入到最小分配大小。这样可以确保:
但是,这些是实现细节,您不能真正依赖
malloc()
的任何特定行为。