gpt4 book ai didi

c - 分配某个变量后,双指针的地址被删除

转载 作者:行者123 更新时间:2023-11-30 20:49:43 26 4
gpt4 key购买 nike

分配双指针后我遇到了一个有趣的问题。

int **bucket;
bucket = (int **)malloc(sizeof(int) * 10);

我已经毫无问题地创建了一个双指针,并且还创建了一个单指针。

int *size;
size = (int *)malloc(sizeof(int) * 10);

在第一个循环中,我分配了 bucket 的每个元素,并且,第二个循环,我将 size 的每个元素分配为零.

for (i = 0; i < 10; i++)
*(bucket + i) = (int *)malloc(sizeof(int) * 1);
for (i = 0; i < 10; i++)
size[i] = 0;

当我对大小进行分配操作时,它删除了存储桶中某些元素的地址。这是我调试时的截图。

在这个阶段我还没有进入第二个循环:

enter image description here

这是在我进入第二个循环之后: enter image description here

什么可能导致此问题?有什么想法吗?

最佳答案

据我所知,问题是

bucket = (int **)malloc(sizeof(int) * 10);

应该是

bucket = malloc (sizeof(*bucket) * 10);  // take the size from the target variable itself

如果在您的平台中,sizeof (int*) 小于 sizeof(int),您最终会在访问 时出现内存溢出存储桶,从而调用未定义的行为。

注释:

  1. No need to cast the return value of malloc() and family.
  2. 最好不要使用硬编码类型进行大小计算。

关于c - 分配某个变量后,双指针的地址被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58955628/

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