gpt4 book ai didi

c - c中的malloc函数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:14 25 4
gpt4 key购买 nike

我无法理解以下程序输出的原因

#include <stdio.h>
#include <stdlib.h>
int main(){
int* ip = (int*)malloc(100*sizeof(int));
if (ip){
int i;
for (i=0; i < 100; i++)
ip[i] = i*i;
}
free(ip);
int* ip2 = (int*)malloc(10*sizeof(int));
printf("%d\n", ip[5]);
printf("%d\n", ip2[5]);
ip[5] = 10;
printf("%d\n", ip2[5]);
return 0;
}

输出显示 ip 和 ip2 在堆中具有相同的引用。当我们在(ip2)中分配一个 100 int 时,它如何为 ip1 返回相同的引用。它是 malloc 函数的一个特性吗?我知道 malloc 像"new"一样工作,对吗?如果是,那么它应该返回一些随机引用,对吧?

最佳答案

你所有的输出都是未定义的行为,所以它们不代表任何东西:

printf("%d\n", ip[5]);  // ip was freed, so the memory it points to may not be accessed
printf("%d\n", ip2[5]); // reading uninitialized memory
ip[5] = 10; // writing to freed memory
printf("%d\n", ip2[5]); // still reading uninitialized memory

通常,ip2 完全有可能获得与 ip 相同的地址。但是您没有在代码中测试它。你可以这样做,例如:

#include <stdio.h>
#include <stdlib.h>
int main() {
int* ip = (int*)malloc(100 * sizeof(int));
printf("%p\n", ip);
free(ip);
int* ip2 = (int*)malloc(100 * sizeof(int));
printf("%p\n", ip2);
free(ip2);
}

当我运行它时,我实际上得到了两次相同的地址(但不能保证会发生这种情况)。

关于c - c中的malloc函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558470/

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