c语言,fclose()带来的内存错误(求解)

在C语言编程中遇到使用fclose()函数后出现内存错误,表现为'corrupted double-linked list',可能导致程序崩溃。问题可能源于文件指针未正确关闭或内存管理上的问题。需要检查文件操作流程,确保所有打开的文件都已正确关闭,以避免内存泄漏或数据损坏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//一个很短的代码,不知道为什么在fclose的地方报错,代码如下:

#include <string.h>
#include <math.h>
#define LINE 1024
#define NAME 1024
#include "time.h"
#include "omp.h"
#include <complex.h>

int res_extend(char *fin, char *fout, int threads)
        {
        unsigned char cbuf[LINE];
        float fbuf[LINE];
        float **raw_array,**back_array,**patterson_array;
        int i,j;
        int n;
        FILE *input=NULL,*output=NULL;
        srand((unsigned) time(NULL));

        //open input output and gain file
        printf("Start res_extend|\ninput %s output %s \n",fin,fout);
        if ((input=fopen(fin, "r"))==NULL)
                {
                printf("open file error!!\n");
                return 0;
                }
        //calculate the size of the input and gain file by byte.
        int input_length=100;
        back_array=(float**)malloc(sizeof(float)*input_length);
        for(i=0;i<input_length;i++)
                {
                back_array[i]=(float*)malloc(sizeof(float)*4);
                }
        fclose(input);
        return 0;
        }

int main(int argc, char *argv[])
{
    char *raw_name,*out_name;
    int threads;

    raw_name=(char *)malloc(NAME*sizeof(char));
    out_name=(char *)malloc(NAME*sizeof(char));

    if(argc!=4)
    {
        printf("Please input: raw_image out_name threads\n");
        return 0;
    }
    raw_name=argv[1];
    out_name=argv[2];
    threads=atoi(argv[3]);

//    printf("raw_name %s, out_name %s, patterson_name %s\n",raw_name,out_name,patterson_name);
    res_extend(raw_name,out_name,threads);

报错如下:

*** Error in `./patterson': corrupted double-linked list: 0x00000000008e7a50 ***
Aborted (core dumped)

如果把

back_array[i]=(float*)malloc(sizeof(float)*4);删除,就什么事情都没有。
不明觉厉!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值