我有一个结构
typedef struct foo {
int lengthOfArray1;
int lengthOfArray2;
int* array1;
int* array2;
} foo;
我需要为整个结构及其数组内容分配足够的内存。所以假设每个数组的长度为 5...
foo* bar = (foo*)malloc(sizeof(foo) + (sizeof(int) * 5) + (sizeof(int) * 5));
我现在必须将 array1 和 array2 指向分配的缓冲区中的正确位置:
bar->array1 = (int*)(&bar->lengthOfArray2 + sizeof(int));
bar->array2 = (int*)(bar->array1 + lengthOfArray2);
这是正确的吗?
编辑#1
只是为了消除任何混淆:我试图将内存保留在一个 block 中,而不是三个。
编辑 #2
我不能使用 C99,因为 MSVC 2010 编译器不支持它 (http://stackoverflow.com/questions/6688895/does-microsoft-visual-studio-2010-supports-c99)。
最佳答案
你必须分配结构的大小。然后,您必须分配具有各自大小的整数数组。
foo* bar = malloc(sizeof(foo));
/* somewhere in here the array lengths are set then... */
bar->array1 = malloc(sizeof(int) * bar->lengthOfArray1);
bar->array2 = malloc(sizeof(int) * bar->lengthOfArray2);
关于c - 如何应用结构偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879404/