私はC言語で2つのスレッドを実行していますが、両方ともいくつかの操作をしています。どちらのスレッドも無限ループを含んでいます。このプログラムを何回か実行すると、常にメモリリークエラーが発生します。free()のメモリエラー
*** 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);
}
コードの少なくとも一部を投稿してください。 – cnicutar
*関連コードを投稿することもできます。ところで、アプリを終了すると、ほとんどのオペレーティングシステム(Mac OS XやLinuxを含む)では、すべてのメモリが解放されます。 –
プログラムを終了すると、OSは割り当てられたリソースを自動的に解放します。 OSが非常に壊れていない限り、非常に壊れています。このケースを処理することについて心配する必要はありません。 – aroth