【发布时间】:2017-02-07 20:10:42
【问题描述】:
这是我为GCC 编译器编写的代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p = (int *)malloc(9 * sizeof(char));
p[0] = 2147483647;
p[1] = 2147483647;
p[2] = 1025;
printf("%d, %d, %d, %d\n", sizeof(char), *(p), *(p+1), *(p+2));
}
输出如下:
1, 2147483647, 2147483647, 1025
我的问题是,虽然我只为指针分配了 9 个字节,但它似乎使用了全部 12 个字节。如果我使用(char *) 而不是 (int *),结果是相同的(除非出现编译器警告)。 malloc()的分配是不是一圈圈?即它总是以指针的数据类型的倍数分配,而不管我们分配了什么?还是特定于实现?
【问题讨论】:
-
应该按字节计算? PS - 你不需要演员表。
-
你做了不合法的事情,没有人注意到。合法吗?
-
谢谢。我更正了
-
代码被破坏并且做了一些不应该做的事情。它没有造成坏事的事实只是一个巧合,可能会发生也可能不会发生。
-
@UmeshCG 如果您想知道为什么写到
malloc()'d 缓冲区的末尾,请参阅stackoverflow.com/a/32683914/4756299,尽管这是未定义的行为,但有时似乎是无害的。
标签: c pointers malloc allocation