int* doubleArray(int *ptr, int n){
delete[] ptr;
int size = 2*n;
int * tmp = new int[size];
ptr = tmp;
delete [] tmp;
return ptr;
}
, когда я запускаю этот код, чтобы удвоить размер массива он заканчивается в вине Сегментация и когда я бегу Valgrind он отображает это сообщение:C++ Valgrind утратившим удалить динамический массив
Invalid free()/delete/delete[]/realloc()
==96889== at 0x4A08634: operator delete[](void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==96889== by 0x400C9E: doubleArray(int*, int) (debug.cpp:55)
==96889== by 0x400B58: main (debug.cpp:34)
==96889== Address 0xfff000300 is on thread 1's stack
==96889== in frame #0, created by operator delete[](void*)
и вот вывод программы:
75 0 760281175 52 1621398400
*** Error in `./debug': free(): invalid pointer: 0x00007ffd60a49258 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3427c77a8d]
/lib64/libc.so.6(cfree+0x5cd)[0x3427c83d2d]
./debug[0x400cd8]
./debug[0x400b99]
/lib64/libc.so.6(__libc_start_main+0xf0)[0x3427c20700]
./debug[0x400a29]
здесь я инициализировать первый массив с именем из главного
int* ptr = initArray(n);
int* initArray(int n){
int arr[n];
int *ptr = arr;
return ptr;
}
любые идеи о том, как исправить эту утечку?
я изменил его к этому, и я все еще получаю утечку памяти: == 8065 == 40 байт в 1 блоках, безусловно, потеряли в потере записи 1 из 2 == 8065 == в 0x4A077FD оператор: новый [ ] (unsigned long) (в /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) == 8065 == by 0x400CB6: doubleArray (int *, int) (debug.cpp: 55) == 8065 = = by 0x400B58: main (debug.cpp: 34) == 8065 == == 8065 == LEAK SUMMARY: == 8065 == определенно потеряно: 40 байт в 1 блоке – Jon
@Jon: избегайте такого рода памяти в первую очередь. Используйте 'std :: vector'. – GManNickG