C 从文件中读取第一行给定尺寸的二维数组

C 从文件中读取第一行给定尺寸的二维数组,c,arrays,linux,multidimensional-array,C,Arrays,Linux,Multidimensional Array,我编写了一个代码,从文件中读取二维整数数组,第一行给出了维数。在运行它时,会出现以下错误: “./shell”中的错误:双重释放或损坏(输出):0x000000000144a0c0* 中止(堆芯转储) 这是我的密码 #include <stdio.h> #include <stdlib.h> int main(int argc , char* argv[]) { FILE * fp; char * line = NULL; char * token ; size_t

我编写了一个代码,从文件中读取二维整数数组,第一行给出了维数。在运行它时,会出现以下错误:

“./shell”中的错误:双重释放或损坏(输出):0x000000000144a0c0* 中止(堆芯转储)

这是我的密码

#include <stdio.h>
#include <stdlib.h>


int main(int argc , char* argv[])
{
FILE * fp;
char * line = NULL;
char * token ;
size_t len = 0;
ssize_t read;
int i;
int j ;
int flag = 0 ;
int row = 0 ;
int **matr ;
char cwd[1024];

getcwd(cwd, sizeof(cwd)) ;
char *matrix = malloc(strlen(cwd)+10);
// here but your file name

asprintf(&matrix,"%s%s",cwd,"/matrix");

fp = fopen(matrix, "r");
if (fp == NULL)
{
    exit(EXIT_FAILURE);
}

while ((read = getline(&line, &len, fp)) != -1)
{

    if(flag == 0)
    {
        token = strtok (line," ");
        i = atoi(token);
        token = strtok (NULL, " ");
        if (token != NULL)
        {
            j = atoi(token);

        }
        printf("%d   %d\n",i,j);
        flag =1 ;
        matr = (int**)malloc(i*sizeof(int*));
        int e ;
        for(e=0; e<=i; e++)
        {
            matr[e] = (int*)malloc(j*sizeof(int));
        }
    }

    else if(row <i)
    {
        int col = 0 ;
        token = strtok (line,"\t");
        while (token != NULL && col<j)
        {
            matr[row][col] = atoi(token);
            printf("%d ",matr[row][col]);
            col++ ;
            token = strtok (NULL,"\t");
        }
        printf("\n");
        row++ ;
    }

  }

fclose(fp);
return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*fp;
char*line=NULL;
字符*令牌;
尺寸长度=0;
阅读;
int i;
int j;
int标志=0;
int行=0;
国际**材料;
char-cwd[1024];
getcwd(cwd,sizeof(cwd));
字符*矩阵=malloc(strlen(cwd)+10);
//这是你的文件名
asprintf(&matrix,“%s%s”,cwd,“/matrix”);
fp=fopen(矩阵,“r”);
如果(fp==NULL)
{
退出(退出失败);
}
while((read=getline(&line,&len,fp))!=-1)
{
如果(标志==0)
{
令牌=strtok(第行“”);
i=atoi(令牌);
令牌=strtok(空,“”);
if(令牌!=NULL)
{
j=atoi(令牌);
}
printf(“%d%d\n”,i,j);
flag=1;
matr=(int**)malloc(i*sizeof(int*);
INTE;

对于(e=0;e,发布的代码存在不可恢复的内存泄漏

通过调用malloc()函数,将指针
矩阵设置为指向某个分配的内存


然后该指针被对asprintf()的调用覆盖,建议使用sprintf()或替换对
malloc()的调用
使用
char*matrix=NULL;

实际上并没有
释放任何分配的内存。首先从释放它们开始。我试图释放它们,但仍然存在相同的问题!!没有2D数组。存在多个错误。查看指针,删除不必要的强制转换并启用编译器警告。问题是关于运行时pro但是,问题是,发布的代码缺少几个#include语句(我们可以猜出您包含了哪些头文件吗?)并包含其他一些语法问题。编译时,始终启用所有警告,然后修复这些警告。(对于gcc,至少使用:
-Wall-Wextra-pedantic
)请一致地缩进代码。出于几个原因,不要使用制表符进行缩进,每个缩进级别使用4个空格。建议在每个开始大括号“{”后缩进,在每个结束大括号“}”前取消缩进。使用空行分隔代码块(if、else、For、while、do…while等)也有助于代码的可读性