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"
个。
答案 0 :(得分:5)
**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));
来调用{{1}}之前,您可以避免崩溃。{}} p>
{{1}}
答案 1 :(得分:1)
我看到了
komsuSayisi++;
您没有粘贴整个代码,但可能就是崩溃您的程序...我没有看到在该增量之前的任何初始化....
这加上在其他答案上发布的分歧