使用malloc有什么问题?
我正在从文件中读取矩阵,并具有以下代码:使用malloc有什么问题?,c,memory-management,malloc,C,Memory Management,Malloc,我正在从文件中读取矩阵,并具有以下代码: int **mat; int main(void) { FILE *fp; if((fp = fopen("matrix.txt", "r")) == NULL){ printf("Cannot open file \n"); exit(1); getch(); } fscanf(fp, "%d", &N); //size of matrix NxN m
int **mat;
int main(void) {
FILE *fp;
if((fp = fopen("matrix.txt", "r")) == NULL){
printf("Cannot open file \n");
exit(1);
getch();
}
fscanf(fp, "%d", &N); //size of matrix NxN
mat = (int**)malloc(N * sizeof(int*));
for(i = 1; i <= N; i++){
mat[i] = (int*)malloc(N * sizeof(int));
for(j = 1; j <= N; j++)
fscanf(fp, "%1d", &mat[i][j]);
}
fclose(fp);
int**mat;
内部主(空){
文件*fp;
if((fp=fopen(“matrix.txt”,“r”))==NULL){
printf(“无法打开文件\n”);
出口(1);
getch();
}
fscanf(fp,'%d',&N);//矩阵NxN的大小
mat=(int**)malloc(N*sizeof(int*);
对于(i=1;i更改为for(i=1;i
和for(j=0;j
,因为C使用基于0的索引。也就是说,数组的第一个元素A是[0](而不是[1])包含
——因此您不需要从malloc 3
转换返回,这会掩盖进一步的问题
for(i=1;i<=N;i++){
mat[i] = (int*)malloc(N*sizeof(int));
for(j=1;j<=N;j++)
fscanf(fp, "%1d", &mat[i][j]);
}
(i=1;i不太
您缺少对free
的几个调用。对malloc
的每个调用都应该有一个对free
的相应调用
数组标记从零开始,而不是从一开始
在exit
之后调用getch()
是多余的
main
通常被定义为intmain(intargc,char**argv)
您缺少main
对于大型数组,此代码的内存效率不如它可能的高。您可以使用一个大小为N*N*sizeof(int)的malloc。然后将其作为数组[N*row+col]进行索引。如果该符号太难看,可以通过宏在其上涂上一些语法糖
还有,其他人都说了什么。我们当然不能,因为您没有提供任何错误消息。强制转换。不要强制转换。(还有索引。)很多事情。首先,C中的数组索引从0
到N-1
,而不是1
到N
。给我们一个提示。产生了什么错误?@agksmehx是的,但他可以很容易地描述他的问题,而不是问“怎么了?”他肯定知道有什么问题,这就是为什么他首先在这里。他需要d描述得到+1的错误。