Я запускаю два отдельных потока в C, оба выполняют некоторые операции.Оба потока включают бесконечный цикл.Когда я запускаю эту программу пару раз, я всегда получаю ошибку утечки памяти.
*** glibc detected *** ./a.out: free(): invalid next size (normal): 0x08652510 ***
======= Backtrace: =========
/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);
}