【发布时间】:2016-03-18 11:11:20
【问题描述】:
我需要重新分配一个 char 矩阵,但它不起作用。
我尝试了很多解决方案,但没有一个有效。
程序可以编译,但运行后它在 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();
}
【问题讨论】:
-
“如果没有帮助,请阅读手册。”我建议阅读
realloc的描述。 -
首先,不要重新分配给您在调用
realloc时使用的同一个指针。如果realloc失败,它将返回NULL,您将丢失原始指针(否则仍将指向有效分配的内存)。其次,所有的全局变量是怎么回事?他们真的都需要全球化吗?你知道你可以将参数传递给你自己的函数吗? -
您的代码中还有其他或多或少严重的问题,首先引起我注意的是这个调用
printf("%c\n",matr[i])。这里matr[i]是一个指针,而不是一个字符。使用"%p"打印指针。 -
除了 Joachim Pileborg 的评论:在
printf("%c\n",matr[i]);中,您在初始化之前使用matr[i]。换句话说,在第一次调用addCol时,matr为 NULL。 -
为什么所有这些指针?例如有什么用
dim还是start?为什么不直接访问dimD或startD?