C 中有用于分配内存的函数malloc
和realloc
. 这是我快速记下的代码:
char *test;
test = (char *)malloc(sizeof(char) * 2); // По идеи я выделил место под 2 символов char
strcpy(test, "Hello world"); // Тут я записал Hello world хотя я выделил место всего под 2 символа
printf("%d", sizeof(test)); // Тут мне показывает 8, что это за 8, откуда оно взялось ?
test = (char *)realloc(test, sizeof(char) *4); // Добавляем еще место под 4 символа ( непонятно зачем правда, потому что Hello World как-то записалось хотя я выделил всего место под 2 символа
printf("%d", sizeof(test)); // Выводится 8, опять 8..откуда?
free(test);
您能解释一下这实际上是如何工作的吗?也许我不明白什么。
声明了一个指针
确切地
记录在无法写入的内存中。未定义的行为还包括在允许的限制之外静默执行写入时的此类行为:)
系统上的指针大小(您的变量是什么
test
)是 64 位还没有,但只有 4 个字符。
这是变量占用多少内存空间
test
。不是她所指的。释放分配的内存。