gpt4 book ai didi

c - C 中程序的双重释放或损坏 (!prev) 错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:34 25 4
gpt4 key购买 nike

运行我的程序时出现这样的错误:

*** glibc detected *** ./prog: double free or corruption (!prev): 0x09155170 ***

问题显然是通过 malloc 将内存分配给结构,但我无法理解它有什么问题。这是我的程序代码(C 语言):

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

typedef struct
{
char kood[4];
int kogus;
char nimetus[80];
double hind;
int P;
int K;
int A;
}ese;

void sort(int m, ese* d);

void search_kood(int m, ese* d);

void search_nimetus(int m, ese* d);

void search_kuupaev(int m, ese* d);

int menu();

int main (void)
{
FILE *list;
list = fopen("elektroonikapood.txt", "r");
int menu_valik,m,i;
m=0;
if (list==NULL)
{
printf("Empty or corrupted file!");
getchar();
return 0;
}
ese *esemed = (ese*) malloc(sizeof(ese));
while(!feof(list))
{

fscanf(list, "%s", esemed[m].kood);
fscanf(list, "%d", &esemed[m].kogus);
fscanf(list, "%s", esemed[m].nimetus);
fscanf(list, "%lg", &esemed[m].hind);
fscanf(list, "%d", &esemed[m].P);
fscanf(list, "%d", &esemed[m].K);
fscanf(list, "%d", &esemed[m].A);
m++;
}


while(1)
{ menu_valik = menu();
if(menu_valik == 1)
sort(m, esemed);
else if (menu_valik == 2)
search_kood(m, esemed);
else if (menu_valik == 3)
search_kuupaev(m, esemed);
else if (menu_valik == 4)
search_nimetus(m, esemed);
else if (menu_valik == 0)
{
free(esemed);
fclose(list);
exit(1);
}
else
break;
}
return 0;
}

还有一些额外的功能,但我认为它们没有问题。

最佳答案

在这个声明中:

ese *esemed = (ese*) malloc(sizeof(ese)); 

您只为一个 结构分配空间。之后您直接读取多个结构,从而覆盖内存。

关于c - C 中程序的双重释放或损坏 (!prev) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834735/

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