分配双指针后我遇到了一个有趣的问题。
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;
当我对大小进行分配操作时,它删除了存储桶中某些元素的地址。这是我调试时的截图。
在这个阶段我还没有进入第二个循环:
什么可能导致此问题?有什么想法吗?
最佳答案
据我所知,问题是
bucket = (int **)malloc(sizeof(int) * 10);
应该是
bucket = malloc (sizeof(*bucket) * 10); // take the size from the target variable itself
如果在您的平台中,sizeof (int*)
小于 sizeof(int)
,您最终会在访问 时出现内存溢出存储桶
,从而调用未定义的行为。
注释:
- No need to cast the return value of
malloc()
and family. - 最好不要使用硬编码类型进行大小计算。
关于c - 分配某个变量后,双指针的地址被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58955628/