Когда я изучал указатель, у меня была идея получить лучшее представление о распределении памяти, поэтому я попытался выделить память указателю вручную, но это не сработало. Может кто-нибудь объяснить больше об этом? Я ничего не нашел.
Я написал некоторый код на C, этот код выделяет указатель и печатает позиции
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *test;
test = malloc(sizeof(char*));
test[0] = 't';
test[1] = 'e';
test[2] = 's';
test[3] = 't';
test[4] = ' ';
test[5] = ' ';
test[6] = ' ';
test[7] = ' ';
printf("%p\n",test);
printf("%p\n",test[0]);
printf("%p\n",test[1]);
printf("%p\n",test[2]);
printf("%p\n",test[3]);
printf("%p\n",test[4]);
printf("%p\n",test[5]);
printf("%p\n",test[6]);
printf("%p\n",test[7]);
}
, когда я выполняю его, выводом является эта и только первая строкаизменяется при выполнении
0x561160
0x74
0x65
0x73
0x74
0x20
0x20
0x20
0x20
Так что напишите это другое
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *memory;
memory = malloc(1);
// memory = 0x561160;
memory[0] = 0x74;
memory[1] = 0x65;
memory[2] = 0x73;
memory[3] = 0x74;
memory[4] = 0x72;
memory[5] = 0x20;
memory[6] = 0x20;
memory[7] = 0x20;
printf("%s",memory);
}
, если я выделю память, программа получит вывод 'test' (все в порядке)
Но если я использую закомментированную позицию в памяти (которую я получаю из другой программы), программа вылетает, кто-то может сказать мне, почему программа вылетает, если я не освободил другой указатель?