使用结构指针的内存分配问题
Issue with Memory Allocation using Struct Pointers
所以,这是我的问题,我已经坚持了一段时间了。
这是使用链接列表...
我有两个这样声明的结构
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));
停止我的程序。这位于 returns 的函数中
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 文件工作正常。没有必要向您提供我的其余代码,因为我确定错误出在某处。
如果您的 AccountNodeP
是指向您的结构的指针,则 sizeof(AccountNodeP)
将 return 指针的大小而不是结构的大小。您可能想改用 sizeof(struct AccountNode)
。
P.S。并且不要投射 malloc
的 return!
您在调用 strcpy(acctNodePtr->name, name)
之前没有先初始化 acctNodePtr->name
以指向有效的内存地址。
您可以使用acctNodePtr->name = malloc(strlen(name)+1)
正确初始化它。
所以,这是我的问题,我已经坚持了一段时间了。 这是使用链接列表... 我有两个这样声明的结构
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));
停止我的程序。这位于 returns 的函数中
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 文件工作正常。没有必要向您提供我的其余代码,因为我确定错误出在某处。
如果您的 AccountNodeP
是指向您的结构的指针,则 sizeof(AccountNodeP)
将 return 指针的大小而不是结构的大小。您可能想改用 sizeof(struct AccountNode)
。
P.S。并且不要投射 malloc
的 return!
您在调用 strcpy(acctNodePtr->name, name)
之前没有先初始化 acctNodePtr->name
以指向有效的内存地址。
您可以使用acctNodePtr->name = malloc(strlen(name)+1)
正确初始化它。