mallocの後freeでエラーが発生した問題
今日プログラムを書く時に1つの問題にぶつかって、1つのポインタにメモリをコピーする時、いつも間違います
メモリが開いていないことに気づきました
その後、問題ないことに気づき、後で思い出したのですが、システムがmalloc()/calloc()/realloc()などを使う場合は、手動freeが必要で、空にする必要があります.さもないと
メモリの漏洩の原因となります.その後、私はすぐにポインタを空にしました.しかし、次のエラーが発生しました.
invalid address or address of corrupt block 0x6b91d928 passed to dlfree
困惑して、どうして、1つの壊れた住所に空を置くことができないことを说明します???
コードにこの文を見つけました
このコードはポインタのアドレスをずらしたようで、それから私が再び解放したとき、アドレスが変わったことに気づいて、再び解放するとオフセットしたアドレスが解放されます.だから新聞を間違えた.
これを解決する方法も簡単です.この位置をオフセットする前に、同じポインタを定義し、前のポインタに割り当てます.そして元のポインタでアドレスをずらして、最後にその新しい定義のポインタを解放すればいいです.
このようにして、エラーのアドレスを解放することを防止することができます.
memcpy(AudioSend_Stream, UdpPackageHead, 6);
メモリが開いていないことに気づきました
AudioSend_Stream = (unsigned char *)malloc(sizeof(UdpPackageHead));
その後、問題ないことに気づき、後で思い出したのですが、システムがmalloc()/calloc()/realloc()などを使う場合は、手動freeが必要で、空にする必要があります.さもないと
メモリの漏洩の原因となります.その後、私はすぐにポインタを空にしました.しかし、次のエラーが発生しました.
invalid address or address of corrupt block 0x6b91d928 passed to dlfree
困惑して、どうして、1つの壊れた住所に空を置くことができないことを说明します???
コードにこの文を見つけました
memcpy(AudioSend_Stream + 9, &talkdata, sizeof(talkdata));
このコードはポインタのアドレスをずらしたようで、それから私が再び解放したとき、アドレスが変わったことに気づいて、再び解放するとオフセットしたアドレスが解放されます.だから新聞を間違えた.
これを解決する方法も簡単です.この位置をオフセットする前に、同じポインタを定義し、前のポインタに割り当てます.そして元のポインタでアドレスをずらして、最後にその新しい定義のポインタを解放すればいいです.
unsigned char* AudioSend_Stream1 = NULL;
AudioSend_Stream1 = AudioSend_Stream;
memcpy(AudioSend_Stream + 9, &talkdata, sizeof(talkdata));
free(AudioSend_Stream1);
AudioSend_Stream1=NULL;
このようにして、エラーのアドレスを解放することを防止することができます.