Open Creyel opened 7 months ago
será que estas declarando memoria así?
char array[4096];
4096 es demasiado grande para inicializarse en el stack. Debes usar new/delete para que se inicialice en el heap.
char* array = new char[4096];
// ... code
delete[] array;
Lo cambie y ahora me aparece otro error:(
==1011==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x621000004080 at pc 0x55d6fe55c83c bp 0x7fff2d29ecb0 sp 0x7fff2d29eca0 WRITE of size 4 at 0x621000004080 thread T0
#1 0x55d6fe553069 in HeapFile::vacuum() /home/creyel/implementacion_bdd/IIC3413/src/storage/heap_file/heap_file.cc:51
#2 0x55d6fe507eec in main /home/creyel/implementacion_bdd/IIC3413/src/tests/test_example_4.cc:50
#3 0x7fb99e2e9082 in __libc_start_main ../csu/libc-start.c:308
#4 0x55d6fe5061ed in _start (/home/creyel/implementacion_bdd/IIC3413/build/Debug/tests/test_example_4+0xb11ed)
Address 0x621000004080 is a wild pointer. SUMMARY: AddressSanitizer: heap-buffer-overflow /home/creyel/implementacion_bdd/IIC3413/src/storage/heap_file/heap_file_page.cc:146 in HeapFilePage::vacuum(Schema const&) Shadow bytes around the buggy address:
El error indica que estás intentando escribir en una posición de memoria incorrecta.
Según el sanitizer es en el archivo src/storage/heap_file/heap_file_page.cc
linea 146.
Lo más probable es que estas usando una posición de memoria mal calculada previamente.
Además dice heap-buffer-overflow
así que lo más probable es que te pasaste de los bytes que tenias reservados.
Una causa típica de porque pasa eso es que cuando haces aritmetica con punteros de un tipo de dato que usa más de un byte, por ejemplo si tienes un int32_t*
y le sumas x, en realidad le estas sumando x*sizeof(int32)
.
int32_t* ptr = something;
ptr += 1; // esto no mueve el puntero 1 byte, lo mueve 4 bytes
Estoy intentando hacer la funcion de vacuum, pero cuando intento serializar records en el char* que estoy usando para hacer la nueva pagina que reemplazara a la original, me aparece el siguiente error:
runtime error: store to address 0x7ffe0106d9b0 with insufficient space for an object of type 'int32_t' 0x7ffe0106d9b0: note: pointer points here