c-使用结构指针的内存分配问题



所以,这是我的问题,我已经在这个问题上呆了一段时间了。这正在处理链接列表。。。我有两个结构被声明为这样的

typedef struct BankAccountList *BankAccountListP;

struct BankAccountList {
   AccountNodeP head;
   int count;
};

AccountNodeP newNode(char *, int, double);

struct AccountNode {
   char *name;
   int id;
   double balance;
   AccountNodeP next;
};

直到这个指针,这一直工作得很好,但当我尝试分配内存时。。。

AccountNodeP acctNodePtr = (AccountNodeP) malloc(sizeof(AccountNodeP));

停止我的程序。它位于一个函数中,该函数返回accountNodePtr

功能:

AccountNodeP newNode(char *name, int id, double balance) {
   AccountNodeP acctNodePtr = (AccountNodeP) malloc(sizeof(AccountNodeP));
                        fprintf(stderr, "nERROR 4n");
   if (acctNodePtr == NULL) {
       fprintf(stderr, "nERROR 10n");         
   }
   acctNodePtr->next = NULL;
   acctNodePtr->id = id;
   acctNodePtr->balance = balance;
   strcpy(acctNodePtr->name, name);
   return acctNodePtr;
}

第一次和第二次调用这个函数时,它都工作了,但最后我的程序仍然没有正确结束,它出错并停止运行。然而,信息保存在结构中(我可以使用fprintf(stderr)来判断。)然而,当我第三次调用它时,它会出错并在AccountNodeP acctNodePtr = malloc...语句。由于使用fprintf(stderr),我也知道这一点。

你能看到我的代码有什么明显的错误吗?我不确定我是否能指出这个问题。请帮助我理解,而不仅仅是给我答案,我需要确切地了解正在发生的事情。

注意:错误在这个函数中,我的测试仪和adt文件在这个函数之外工作得很好。没有真正的需要给你我的代码的其余部分,因为我确信错误就在这里。

如果AccountNodeP是指向结构的指针,则sizeof(AccountNodeP)将返回指针的大小,而不是结构的大小。您可能需要放置sizeof(struct AccountNode)

附言:不要铸造malloc的回归!

您调用strcpy(acctNodePtr->name, name)时没有首先初始化acctNodePtr->name以指向有效的内存地址。

您可以使用acctNodePtr->name = malloc(strlen(name)+1)正确初始化它。

相关内容

  • 没有找到相关文章

最新更新