【发布时间】:2020-12-30 01:22:32
【问题描述】:
int 的大小是 4 个字节,我只分配 1 个字节。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv) {
int *a = (int *) malloc(1);
// But I am still able to store int.
*a = 42;
printf("%d\n", *a);
// It also allowed me to store char in an int pointer.
*a = 'H';
printf("%c\n", *a);
}
【问题讨论】:
-
你在问为什么未定义的行为有时会做你想要的吗?
-
@Tom Krazes 是的
-
网站上可能有大量此问题的重复项,我不确定如何最好地解决该问题。我们应该保留一个规范的最好的吗?
-
@R..GitHubSTOPHELPINGICE:我选择了一个相当老的,相当高的投票率,它涵盖了几乎相同的情况(分配一个字节,存储更多)。似乎已经足够接近了。
-
旁注:关于“它还允许我将 char 存储在 int 指针中”;第一,如果您在任何情况下都为其分配了足够的内存(它只会将其扩展为
int大小),那将是合法的,但是第二,'H'实际上是 C 中的int(字符文字是在 C 中键入int,是的,这很奇怪,不,在 C++ 中不一样,其中字符文字实际上是char类型)。
标签: c