【发布时间】:2014-01-22 05:05:47
【问题描述】:
我在这个结构中有一个动态二维数组:
struct mystruct{
int mySize;
int **networkRep;
};
在我的代码块中,我按如下方式使用它:
struct myStruct astruct[100];
astruct[0].networkRep = declareMatrix(astruct[0].networkRep, 200, 200);
// do stuff...
int i;
for(i=0; i<100; i++)
freeMatrix(astruct[i].networkRep, 200);
这就是我声明二维数组的方式:
int** declareMatrix(int **mymatrix, int rows, int columns)
{
mymatrix = (int**) malloc(rows*sizeof(int*));
if (mymatrix==NULL)
printf("Error allocating memory!\n");
int i,j;
for (i = 0; i < rows; i++)
mymatrix[i] = (int*) malloc(columns*sizeof(int));
for(i=0; i<rows; i++){
for(j=0; j<columns; j++){
mymatrix[i][j] = 0;
}
}
return mymatrix;
}
这就是我释放二维数组的方式:
void freeMatrix(int **matrix, int rows)
{
int i;
for (i = 0; i < rows; i++){
free(matrix[i]);
}
free(matrix);
matrix = NULL;
}
我看到的奇怪行为是,当我编译并运行我的程序时,一切看起来都正常。但是当我将标准输出通过管道传输到 txt 文件时,我遇到了段错误。但是,如果我注释掉包含“freeMatrix”调用的循环,则不会发生段错误。我做错了什么?
【问题讨论】:
标签: c arrays struct malloc free