我需要重新分配一个char矩阵,但它不起作用。
我尝试了许多解决方案,但没有人工作。
程序编译但是在runnig之后它会在realloc()上崩溃。
#include <stdio.h>
#include <stdlib.h>
typedef struct Xy {
int x;
int y;
}Xy;
typedef struct Nodo{
Xy destination;
struct Nodo *next;
}Nodo;
char **matrD;
char **matrU;
char **matr;
int i,j;
Nodo *header;
Xy pos;
Xy dimD;
Xy dimU;
Xy startD;
Xy startU;
Xy *dim;
Xy *start;
char flor='d';
int *dimen;
int dimenD[]={10,6};
int dimenU[]={10,6};
int gradi=0;
char sens[4];
void addCol(){
int newsize=dim->x+2;
for(i=0;i<dim->y;i++){
printf("ciao\n");
printf("%d",newsize);
printf("%c\n",matr[i]);
matr[i]=realloc(matr[i],sizeof(char)*newsize); <-----it crash here
printf("ciao\n");
}
dim->x=dim->x+2;
}
void addRow(){
dim->y=dim->y+2;
// matr= (char*)realloc(matr,dim->y);
}
void loop() {
addCol();
// stampamatrix();
}
void main() {
sens[0]='t';
startD.x=0;
startD.y=0;
startU.x=0;
startU.y=0;
pos.x=0;
pos.y=0;
dimD.x=1;
dimD.y=1;
dimU.x=0;
dimU.y=1;
dim=&dimD;
dimen=dimenD;
start=&startD;
matrD =malloc(sizeof(char*)*dimD.x);
matrD[0] =malloc(sizeof(char)*dimD.x);
matrU =malloc(sizeof(char*)*dimU.y);
matrU[0] =malloc(sizeof(char)*dimU.x);
loop();
}
答案 0 :(得分:1)
问题是你没有在任何地方初始化matr
,这意味着它是一个空指针(因为它是一个全局变量,它是“零初始化”,这意味着指针NULL
。
因此,当您尝试使用例如matr
取消引用时matr[i]
然后你会有未定义的行为,而且很可能是崩溃。
您应该学习如何使用调试器,因为这个问题非常明显。在崩溃的位置发生崩溃时,在调试器中运行会使调试器停止。然后,它将允许您向上走动函数调用堆栈,以便您可以访问代码(如果调试器尚未停止在您的代码中),然后您可以检查所涉及参数的值。检查调试器中的matr[i]
会导致调试器告诉你它不是一个有效的指针,你会在没有任何帮助的情况下很快看到这个问题。
答案 1 :(得分:0)
您没有为matr
分配内存,因此您尝试访问matr[i]
会导致未定义的行为。