Для домашней работы я должен построить следующий простой сценарий.
Моя попытка выглядит так:
#include <stdlib.h>
int main() {
char* heap1P = malloc(sizeof(char**));
char* heap2P = malloc(sizeof(char*));
char* heap3P = malloc(sizeof(char));
*heap3P = 'X';
*heap2P = heap3P;
*heap1P = heap2P;
char*** stackP = heap1P;
puts("stack | heap ");
printf("%p [%p] | %p [%p] => %p [%p] => %c [%p] \n", stackP, &stackP, *heap1P, heap1P, *heap2P, heap2P, *heap3P, heap3P);
return EXIT_SUCCESS;
}
Сначала я выделяю место в памяти, а затем устанавливаю значения.Выходные данные имеют вид (формат: значение [адрес]):
stack | heap
0x55a1e184f260 [0x7fff05e55c08] | 0xffffff80 [0x55a1e184f260] => 0xffffffa0 [0x55a1e184f280] => X [0x55a1e184f2a0]
Как вы можете видеть, значение стека содержит адрес первого значения кучи.Но значения кучи не верны.Они не содержат адрес следующего значения кучи.
Почему значения кучи не содержат заданные адреса?