Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 双指针的地址在分配一些变量后被删除_C_Pointers_Segmentation Fault - Fatal编程技术网

C 双指针的地址在分配一些变量后被删除

C 双指针的地址在分配一些变量后被删除,c,pointers,segmentation-fault,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 **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;
(i=0;i<10;i++)的

*(bucket+i)=(int*)malloc(sizeof(int)*1);
对于(i=0;i<10;i++)
大小[i]=0;
当我对size执行赋值操作时,它会删除bucket中某些元素的地址。这里是我调试时的屏幕截图

在此阶段,我没有进入第二个循环:

这是在我进入第二个循环之后:


什么会导致这个问题?有什么想法吗?

在我看来这是个问题

bucket = (int **)malloc(sizeof(int) * 10);
应该是这样

bucket = malloc (sizeof(*bucket) * 10);  // take the size from the target variable itself
如果在您的平台中,
sizeof(int*)
小于
sizeof(int)
,那么在访问
bucket
时将导致内存溢出,从而调用未定义的行为

注:

  • 最好不要使用硬编码类型进行尺寸计算

  • sizeof(int)!=sizeof(int*)
    如果我不在变量前面使用强制转换,它就不允许我编译。自从我开始上大学,我就用这个惯例,我在上面写道。他们表现得像这样。这就是为什么我很困惑谢谢你的帮助help@KaanTahaK奥肯:“如果我不在变量前面使用铸造,它就不让我编译。”那么,你不使用标准兼容的C编译器,也许是C++编译器?