gpt4 book ai didi

c - 在 C 中,内存分配失败,为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:29 25 4
gpt4 key购买 nike

int x;
int komsuSayisi;//adjanceny matrix
int **arkadas;
int t;
int komsu[24][24];

scanf("%d",&t);
**arkadas = (int **)malloc( t*sizeof( int* )); //allocating rows
for(i=0; i<t; i++)
{
x=0;
arkadas[i] = (int *)malloc( t*sizeof(int) ); //allocating cow temporarily
for(j=0; j<t; j++)
{
komsu[i][j]=fark(kelime[i],kelime[j]); //fark returns 1 or 0.
//so i put those 1 ones to another matrix,arkadas
if(komsu[i][j]==1){
komsuSayisi++;
arkadas[i][x]=j;
x++;
}
arkadas[i] = (int *) realloc(arkadas[i], x);
//real allocating here
}

它给出错误并关闭。没有错。我想要的是 adjanceny 太大而无法搜索,因此我将使用此矩阵轻松搜索 "1"

最佳答案

**arkadas = (int **)malloc( t*sizeof( int* ));

应该是

arkadas = malloc( t*sizeof( int* ));

**arkadas 取消引用未初始化的指针,导致您尝试写入不可预测的地址。您不拥有此地址的内存,因此尝试写入它是不安全的。

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

稍后在你的程序中

if(komsu[i][j]==1){
komsuSayisi++;
arkadas[i][x]=j;
x++;
}
arkadas[i] = (int *) realloc(arkadas[i], x);

if 条件中的代码会在您分配它之前尝试写入 arkadas[i]。这也会调用未定义的行为并且可能会崩溃。您可以通过删除行 arkadas[i][x]=j; 并将您的 realloc 调用换成 malloc 来避免崩溃(您需要在调用 realloc)

之前的先前分配的地址
if(komsu[i][j]==1){
komsuSayisi++;
x++;
}
arkadas[i] = malloc(x*sizeof(int));

关于c - 在 C 中,内存分配失败,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com