使用Struct指针进行内存分配的问题

时间:2015-02-06 16:22:33

标签: c pointers struct linked-list malloc

所以,这是我的问题,我已经坚持了一段时间了。 这与链接列表有关... 我有两个结构声明为

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 4\n");

   if (acctNodePtr == NULL) {
       fprintf(stderr, "\nERROR 10\n");         
   }
   acctNodePtr->next = NULL;
   acctNodePtr->id = id;
   acctNodePtr->balance = balance;
   strcpy(acctNodePtr->name, name);
   return acctNodePtr;
}

第一次和第二次调用此函数它可以工作,但最后我的程序仍然没有正确结束,它得到错误并停止运行。但是,信息保存在结构中(我能够使用fprintf(stderr)告诉我。)但是,我第三次调用它时,它会出错并停止我的程序 AccountNodeP acctNodePtr = malloc...声明。我也知道这是因为使用了fprintf(stderr)。

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

注意:错误在这个函数中,我的测试器和adt文件工作正常,然后这个函数。没有真正需要提供我剩下的代码,因为我确定错误在某处。

2 个答案:

答案 0 :(得分:3)

如果AccountNodeP是指向结构的指针,sizeof(AccountNodeP)将返回指针的大小而不是结构的大小。您可能希望改为使用sizeof(struct AccountNode)

P.S。并且不要过时malloc

答案 1 :(得分:1)

在没有先将strcpy(acctNodePtr->name, name)初始化为指向有效的内存地址的情况下,您正在调用acctNodePtr->name

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