gpt4 book ai didi

c - C中的内存分配

转载 作者:太空狗 更新时间:2023-10-29 17:14:46 26 4
gpt4 key购买 nike

我有一个关于内存分配顺序的问题。在下面的代码中,我在一个循环中分配了 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]);
}

输出:

abcdefgh 9650064 9650128

good-luck 9650068 9638624

mully 9650072 9638680

stam 9650076 9638736

最佳答案

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

  • 运行时库为其簿记信息留出空间
  • 运行时库更有效地管理分配的 block ,这些 block 都是某个大小的倍数(例如 16 字节)

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

关于c - C中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com