c - 如何应用结构偏移量?

标签 c visual-c++ pointers struct pointer-arithmetic

我有一个结构

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/

相关文章:

c++ - 打开错误文件的错误信息

c++ - 如何最好地在我的 C++ 程序中使用相同的 Boost 日志?

c++ - 数组初始化函数 : Passing Array as Pointer: C++

c - 分配给作为指针的结构体组件

c - 是否保证执行 memcpy(0,0,0) 是安全的?

c - 我如何在 UNix 上使用 pow() 和 sqrt()?

c - 如何在 GCC x86 内联汇编中使用地址常量

visual-c++ - 如何将 std::variant 作为 VARIANT* 传递给 ExecWB?

将 int 转换为 char 指针 : unexpected value?

c++ - 推荐一个 c++ 库来处理 http