【发布时间】:2013-05-14 21:59:31
【问题描述】:
这是如何使用 C struct hack 时分配的“额外”内存?
问题:
我在下面有一个 C struct hack 实现。我的问题是如何使用我分配给黑客的“额外”内存。有人可以给我一个使用额外内存的例子吗?
#include<stdio.h>
#include<stdlib.h>
int main()
{
struct mystruct {
int len;
char chararray[1];
};
struct mystruct *ptr = malloc(sizeof(struct mystruct) + 10 - 1);
ptr->len=10;
ptr->chararray[0] = 'a';
ptr->chararray[1] = 'b';
ptr->chararray[2] = 'c';
ptr->chararray[3] = 'd';
ptr->chararray[4] = 'e';
ptr->chararray[5] = 'f';
ptr->chararray[6] = 'g';
ptr->chararray[7] = 'h';
ptr->chararray[8] = 'i';
ptr->chararray[9] = 'j';
}
【问题讨论】:
-
你能给我们更多的背景信息吗?什么是 c 结构黑客?您的实际问题是什么?
-
@RobertHarvey 我相信将数组从 1 个元素扩展到 9 个元素。
-
@RobertHarvey 通过在末尾声明一个长度为 1 的数组来伪造一个灵活的数组成员。在 C99 中添加灵活的数组成员之前,这是 使结构具有可变(和运行时确定的)长度的数组的方式。 (但未定义的行为。)但我怀疑你的问题是反问。
-
@RobertHarvey 第一次看到它时会感到害怕,但实际上它的效果很好。
-
@RobertHarvey 它被广泛使用,以至于没有编译器能够承受破坏它。但根据标准,它始终是明确未定义的行为[嗯,显然不是在第一个标准之前]。现在我们已经标准化了灵活的数组成员,因此 struct hack 应该遵循 dodo。
标签: c