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

标签 c pointers segmentation-fault

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

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/

相关文章:

c++ - 当 C++ 实现向 C 代码抛出异常时会发生什么

c++ - 箭头运算符和 vector

c - 这段代码的输出是什么,数组和指针

c++ - 程序结束时出现段错误

c - 宏作为 C 中宏的参数

c - cudaMalloc在哪个内存空间分配内存?

objective-c - 为什么这段代码有一个 3 字节的数组来构建一个 "whole byte"?

c++ - 如何理解指针数组的地址?

c - 分段故障?为什么?

c - 从 strtok 或 strtok_r 崩溃返回的打印 token