c - 在动态分配的结构中初始化动态分配的结构

标签 c struct calloc

我想在结构中动态分配结构。我想我可以做到这一点。但是,当我想对它们执行操作时,我在 Visual C++ 下遇到访问冲突错误。也许初始化有问题。顺便问一下,如何初始化动态分配的 myDynamicMembersBinArray?我尝试了以下方法:

#include <stdio.h>
#include <stdlib.h>



int main()
{
    /* ========== Define structures ========== */

    /* Create just the identifier */
    struct bin{
        char *tag;
        float size;
    };
    /* Declare another structure which will hold the bin structure */
    struct dynamicbin{
    struct bin *binPointer;
    };
    /* I use calloc so that zero-filling is done */
    myDynamicMembersBinArray = (struct dynamicbin*)calloc(1, sizeof(struct dynamicbin));
    struct bin *binpointer = (struct bin*)calloc(N, sizeof(struct bin));

    /* This one fails */
    for (int i=0; i<N; i++){
        printf("%f\n", (*(*myDynamicMembersBinArray).binPointer+i).size);
    }

提前谢谢你。

最佳答案

你没有声明myDynamicMembersBinArray:
struct dynamicbin* myDynamicMembersBinArray = calloc(1, sizeof(struct dynamicbin));

struct bin *binpointer = (struct bin*)calloc(N, sizeof(struct bin)); 应该是
(*myDynamicMembersBinArray).binPointer = calloc(N, sizeof(struct bin));
(*myDynamicMembersBinArray 周围的括号很重要)或更好
myDynamicMembersBinArray->binPointer = calloc(N, sizeof(struct bin));

最后但并非最不重要的
printf("%f\n", (*(*myDynamicMembersBinArray).binPointer+i).size); 应该是
printf("%f\n", *((*myDynamicMembersBinArray).binPointer+i).size);
(注意 * 移到括号外)或更好
printf("%f\n", myDynamicMembersBinArray->binPointer[i].size);

关于c - 在动态分配的结构中初始化动态分配的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199920/

相关文章:

c - StackTop 函数的这两种不同实现有什么区别?

c - 这一系列的 C typedef/struct/union/enum 定义有什么意义?

c - 在 C 中,结构的字段和变量可以具有相同的名称吗?

c - 全局变量和结构体数组

c - 以良好的方式在 C 中分配和释放内存

javascript - int 数组 - Javascript

c++ - OpenMP 使用矩阵乘法任务

c++ - 如何在整个程序中访问有关线程的信息

c - 如何固定结构的分配大小

c - 如何在C中跟踪动态内存的大小