在C语言中,内存分配失败,为什么? intx; 内科姆苏萨伊西//邻接矩阵 国际**阿卡达斯; int t; 国际小松[24][24]; scanf(“%d”、&t); **arkadas=(int**)malloc(t*sizeof(int*)//分配行 对于(i=0;i

在C语言中,内存分配失败,为什么? intx; 内科姆苏萨伊西//邻接矩阵 国际**阿卡达斯; int t; 国际小松[24][24]; scanf(“%d”、&t); **arkadas=(int**)malloc(t*sizeof(int*)//分配行 对于(i=0;i,c,C,应该是 **arkadas = (int **)malloc( t*sizeof( int* )); **arkadas取消对未初始化指针的引用,导致您试图写入不可预测的地址。您不拥有该地址的内存,因此尝试写入该地址是不安全的 第二种形式是将指针数组的地址分配给局部变量arkadas;这就是需要做的事情 稍后在你的节目中 arkadas = malloc( t*sizeof( int* )); 如果条件试图在分配前写入arkadas[i],则该条件中的代码将被写入。这也会调用未定义的行为,并

应该是

**arkadas = (int **)malloc( t*sizeof( int* ));
**arkadas
取消对未初始化指针的引用,导致您试图写入不可预测的地址。您不拥有该地址的内存,因此尝试写入该地址是不安全的

第二种形式是将指针数组的地址分配给局部变量arkadas;这就是需要做的事情

稍后在你的节目中

arkadas = malloc( t*sizeof( int* ));
如果条件试图在分配前写入arkadas[i],则该条件中的代码将被写入。这也会调用未定义的行为,并且可能会崩溃。您可以通过删除行
arkadas[i][x]=j;
并将
realloc
调用替换为
malloc
(在调用
realloc
之前,您需要上一次分配的地址)

应该是

**arkadas = (int **)malloc( t*sizeof( int* ));
**arkadas
取消对未初始化指针的引用,导致您试图写入不可预测的地址。您不拥有该地址的内存,因此尝试写入该地址是不安全的

第二种形式是将指针数组的地址分配给局部变量arkadas;这就是需要做的事情

稍后在你的节目中

arkadas = malloc( t*sizeof( int* ));
如果条件试图在分配前写入arkadas[i],则该条件中的代码将被写入。这也会调用未定义的行为,并且可能会崩溃。您可以通过删除行
arkadas[i][x]=j;
并将
realloc
调用替换为
malloc
(在调用
realloc
之前,您需要上一次分配的地址)

我明白了

您没有粘贴整个代码,但可能这就是导致程序崩溃的原因…我没有看到在增量之前有任何初始化

这加上另一个答案上的尊重

我明白了

您没有粘贴整个代码,但可能这就是导致程序崩溃的原因…我没有看到在增量之前有任何初始化


这加上另一个答案上的尊重

你确定你在做malloc之前需要
**arkadas
吗?我觉得你只需要
arkadas
而没有“*”显示它失败了吗?在哪里?当然你没有检查分配错误。好的,我找到了。arkadas[I]=(int*)realloc(arkadas[I],x);应该是因为,我想是的,但我错认为如果{你写了,“没有什么错”....那么,你为什么要问一个问题?我猜很明显有什么错了!@abelenky想说一些类似的话,但后来我认为这实际上是有帮助的-当有人声称“没有什么错”你可以/应该期待任何数量的错误。仍然+1。你确定在进行malloc之前需要
**arkadas
吗?我觉得你只需要
arkadas
而没有“*”显示它失败了吗?在哪里?当然你没有检查分配错误。好的,我找到了。arkadas[I]=(int*)realloc(arkadas[I],x);应该是因为,我想是的,但我错认为如果{你写了,“没有什么错”....那么,你为什么要问一个问题?我猜很明显有什么错了!@abelenky想说一些类似的话,但后来我认为这实际上是有帮助的-当有人声称“没有什么错”你可以/应该预料到任何数量的错误。仍然+1。不仅在这里写是不安全的,它也没有做它应该做的事情(没有将
arkadas
设置为“t指针数组”)。我将生成t行,每行都有动态大小,=x。@user3721298这很好。分配初始指针数组的方法是进行我上面描述的更改。稍后在您的程序中会出现另一个错误。请参阅我的更新答案。在此处写入不仅不安全,而且也不会执行它应该执行的操作(没有将
arkadas
设置为“t指针数组”)。我将生成t行,每行都具有动态大小,=x。@user3721298这很好。分配初始指针数组的方法是进行我上面描述的更改。您的程序稍后会出现另一个错误。请参阅我更新的答案
if(komsu[i][j]==1){
    komsuSayisi++;
    x++;
}
arkadas[i] = malloc(x*sizeof(int));
 komsuSayisi++;