Realloc使我的程序崩溃

时间:2016-03-18 11:11:21

标签: c realloc

我需要重新分配一个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();

}    

2 个答案:

答案 0 :(得分:1)

问题是你没有在任何地方初始化matr,这意味着它是一个空指针(因为它是一个全局变量,它是“零初始化”,这意味着指针NULL

因此,当您尝试使用例如matr取消引用时matr[i]然后你会有未定义的行为,而且很可能是崩溃。

您应该学习如何使用调试器,因为这个问题非常明显。在崩溃的位置发生崩溃时,在调试器中运行会使调试器停止。然后,它将允许您向上走动函数调用堆栈,以便您可以访问代码(如果调试器尚未停止在您的代码中),然后您可以检查所涉及参数的值。检查调试器中的matr[i]会导致调试器告诉你它不是一个有效的指针,你会在没有任何帮助的情况下很快看到这个问题。

答案 1 :(得分:0)

您没有为matr分配内存,因此您尝试访问matr[i]会导致未定义的行为。