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++编译器?