У меня вопрос о поведении free ().
Используйте простой код, который использует malloc и strcpy a char *. Итак, все настроено на КУЧУ:
(gdb) x/100b 0x602010
0x602010: 66 111 110 106 111 117 114 32
0x602018: 116 111 117 116 32 108 101 32
0x602020: 109 111 110 100 101 0 0 0
0x602028: 0 0 0 0 0 0 0 0
0x602030: 0 0 0 0 0 0 0 0
0x602038: 33 0 0 0 0 0 0 0
Когда я освобождаю кусок с помощью free (), результат будет следующим:
(gdb) x/100b 0x602010
0x602010: 0 0 0 0 0 0 0 0
0x602018: 116 111 117 116 32 108 101 32
0x602020: 109 111 110 100 101 0 0 0
0x602028: 0 0 0 0 0 0 0 0
0x602030: 0 0 0 0 0 0 0 0
0x602038: 33 0 0 0 0 0 0 0
Простой код, подтверждающий, что:
int main ()
{
const char * str = "Bonjour tout le monde";
char *ptr = (char *) malloc (strlen(str) + 1);
strcpy(ptr, str);
printf("*ptr : %s\n\n", ptr);
free(ptr);
printf ("After free ptr = %p\n", ptr);
printf ("Content ptr : %s\n", ptr);
printf ("Content ptr+8 : %s\n", ptr+8);
return 0;
}
Вывод :
*ptr : Bonjour tout le monde
After free ptr = 0x13c7010
Content ptr :
Content ptr+8 : tout le monde
У кого-нибудь есть ответ?