在动态分配的结构中初始化动态分配的结构
Initialize dynamically allocated structures within dynamically allocated structures
我想在结构中动态分配结构。我想我可以做到这一点。但是,当我想对它们执行操作时,我在 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);
}
提前致谢。
这个:
struct bin *binpointer = (struct bin*)calloc(N, sizeof(struct bin));
应该是:
(*myDynamicMembersBinArray).binpointer = calloc(N, sizeof(struct bin));
注意我去掉了演员表。请参阅 this answer 了解原因(请记住,在 C++ 中,您确实需要强制转换。但在 C 中这是错误的,并且可以隐藏错误)。
你没有申报 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);
我想在结构中动态分配结构。我想我可以做到这一点。但是,当我想对它们执行操作时,我在 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);
}
提前致谢。
这个:
struct bin *binpointer = (struct bin*)calloc(N, sizeof(struct bin));
应该是:
(*myDynamicMembersBinArray).binpointer = calloc(N, sizeof(struct bin));
注意我去掉了演员表。请参阅 this answer 了解原因(请记住,在 C++ 中,您确实需要强制转换。但在 C 中这是错误的,并且可以隐藏错误)。
你没有申报 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);