gpt4 book ai didi

c - 关闭文件时出现"Double free or corruption(out)"?

转载 作者:行者123 更新时间:2023-11-30 19:03:16 29 4
gpt4 key购买 nike

我编写了一段代码来练习各种参数(文件、动态二维数组、传递函数指针等),所以不要介意某些段落看起来毫无用处。在运行时,如果我输入超过 3 行,程序就会崩溃,终端显示“双重释放或损坏(出)”,然后创建核心转储。该错误应该发生在 foo2 中的 fclose(fp) 上。

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

void foo1(int *);
void foo2(int*,int,int**,FILE*);
void readfoo(FILE *, int **, int);

int main(void)
{
FILE *fp;
int **a, i, j, r, c, *pr, *pn, *pc;
pc = &c;
pr = &r;
foo1(pr);
a = malloc(r*sizeof(int));
foo2(pc,r,a,fp);
if((fp = fopen("column.txt", "r")) == NULL)
{
fprintf(stderr, "Error, can't open \"column.txt\"");
exit(1);
}
for(i=0;i<r;i++)
{
fscanf(fp,"%d", &c);
for(j=0; j<c; j++)
{
fprintf(stdout, "insert line %d column %d -> ", i+1, j+1);
fscanf(stdin, "%d", &a[i][j]);
}
}
if(fclose(fp) != 0)
{
fprintf(stderr, "Error, can't close \"column.txt\"");
exit(1);
}
readfoo(fp,a,r);
remove("column.txt");
return(0);
}

void foo1(int *r)
{
fprintf(stdout, "how many lines ? -> ");
fscanf(stdin, "%d", r);
}

void foo2(int *c, int r, int **a, FILE *fp)
{
int i,j, act_c;
if((fp = fopen("column.txt", "w")) == NULL)
{
fprintf(stderr, "Error, can't open \"column.txt\"");
exit(1);
}
for(i=0;i<r;i++)
{
fprintf(stdout, "how many columns for line %d? -> ", i+1);
fscanf(stdin, "%d", c);
fprintf(fp,"%d\n", *c);
a[i] = malloc((*c)*sizeof(int));
}
if(fclose(fp) != 0)
{
fprintf(stderr, "Error, can't close \"column.txt\"");
exit(1);
}
}

void readfoo(FILE *fp, int **a, int r)
{
int c, i, j;
fprintf(stdout, "printing the matrix... \n");
if((fp = fopen("column.txt", "r")) == NULL)
{
fprintf(stderr, "Error, can't open \"column.txt\"");
exit(1);
}
for(i=0;i<r;i++)
{
fscanf(fp,"%d", &c);
for(j=0; j<c; j++)
{
fprintf(stdout, "%d ", a[i][j]);
}
fprintf(stdout, "\n");
}
if(fclose(fp) != 0)
{
fprintf(stderr, "Error, can't close \"column.txt\"");
exit(1);
}
}

最佳答案

main()中你会这样做

 a = malloc(r*sizeof(int));

应该是错误的

 a = malloc(r*sizeof(int *));

如果您为 a[i] 赋值,则会调用 UB,这可能是崩溃的真正原因

关于c - 关闭文件时出现"Double free or corruption(out)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239697/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com