使用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的错误。