gpt4 book ai didi

c - free() 内存错误

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

我在 C 中运行两个独立的线程,它们都在执行一些操作。两个线程都包含无限循环。当我多次运行这个程序时,我总是会遇到内存泄漏错误。

*** 检测到 glibc *** ./a.out:free():下一个大小无效(正常):0x08652510 ***

======= 回溯:=========

/lib/libc.so.6(+0x6c501)[0x3d1501]

...

我相信这是一个内存错误,问题是,当我总是需要停止那个程序时(因为我还在测试它),我只是用 Ctrl+C 终止程序,所以我相信我总是错过 free(anything) 命令,然后导致错误。

你能告诉我如何避免这种情况吗?所以即使我终止了程序,我也可以free() 内存?

接下来我想到的是,当我等待几分钟然后再次运行该程序时,它再次完美运行

感谢任何提示

void *lineOne(void *dataO)
{
struct IPlist *IPlist = dataO;

static struct ARP_entryI ARP_tableI[ARP_TABLE_SIZE];
int neigh=0; //pocet susedov
int neigh1=0; //stav pred tym
int i;

getAddress();

while(1)
{
while (neigh == neigh1)
{
neigh =rcvBroad(IPlist, neigh);
}

neigh1=neigh;

for (i=neigh ; i<neigh+1; i++)
{
main_client(ARP_tableI, IPlist[i-1].IPaddr); // vysle tcp, prijme arp
getAddress();
}
}

}

//pocuvaServer, odpoveda ARP
void *lineTwo()
{
static struct ARP_entryO ARP_tableO[ARP_TABLE_SIZE];
int line = from_local_arp(ARP_tableO);

main_server(ARP_tableO, line); // pocuva tcp, vysle arp

}


void main()
{
static struct IPlist *IPlist[ARP_TABLE_SIZE];

pthread_t thread1, thread2;
int iret1, iret2;

/* Create independent threads each of which will execute function */

iret1 = pthread_create( &thread1, NULL, lineOne, (void *)IPlist); //(void *) &
iret2 = pthread_create( &thread2, NULL, lineTwo, NULL);

pthread_join( thread1, NULL);
pthread_join( thread2, NULL);


}

最佳答案

您可以处理 SIGINT,但没关系,当您想要进行额外的 free() 调用时,您的代码已经破坏了内存。

找到问题用-g编译它并用valgrind运行它。

关于c - free() 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761843/

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