我正在尝试从用户输入中读取矩阵维度( dim
)并创建 n*n
动态矩阵。
但是当我打印矩阵时,我的程序崩溃了。
我在Stackoverflow中搜索过,可能是free()
错误。
我不知道为什么,但程序在 dim < 5
时运行。 .
#include <stdio.h>
#include <stdlib.h>
typedef struct{
float real, img;
}COMPLEXO;
void zeroIt(COMPLEXO **matrix, int dim){
int i,j;
for(i=0;i<dim;i++){
for(j=0;j<dim;j++){
matrix[i][j].real=0;
matrix[i][j].img=0;
}
}
}
int main(void){
int dim, i, j;
COMPLEXO **matrix;
int flag = 1;
/*Pedir Dimensao da Matrix*/
printf("DIM: \n");
scanf("%d", &dim);
/*Alocar espaço*/
matrix = (COMPLEXO **) malloc(sizeof(dim) * sizeof(COMPLEXO));
/*Alocar linhas*/
for(i = 0; i < dim; i++){
matrix[i] = (COMPLEXO *) malloc(sizeof(dim) * sizeof(COMPLEXO));
}
if(matrix == NULL){
printf("Erro");
return;
}
/* Escrever dados */
for(i=0;i<dim;i++){
for(j=0;j<dim;j++){
matrix[i][j].real = i;
matrix[i][j].img = j;
}
}
printf("#insert matrix - done\n\n");
/* Imprimir dados */
for(i=0;i<dim;i++){
for(j=0;j<dim;j++){
printf("%.f|%.f ", matrix[i][j].real, matrix[i][j].img);
}
printf("\n");
}
printf("#print matrix - done \n\n");
zeroIt(matrix, dim);
for(i=0;i<dim;i++){
free(matrix[i]);
}
free(matrix);
printf("#free pointer - done \n\n");
getchar();
return 0;
}
最佳答案
您的第一个 malloc 应该使用 sizeof(COMPLEXO*)
,而不是 sizeof(COMPLEXO)
。您正在分配一个指针数组,而不是一个结构数组。
关于c - 自由矩阵的动态矩阵问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130053/