【发布时间】:2019-01-22 03:40:32
【问题描述】:
我有一个我正在尝试构建的“单词”链表,我创建了一个名为“add_to_mem”的函数,它将下一个单词添加到链表中。 我对代码进行了几次检查,发现他工作了两次——一次是当链表为 NULL 时,一次不是——它确实有效,但第三次我打电话到该方法 - 我收到一个“堆已损坏”错误。 代码:
typedef struct { unsigned int val : 14; } word;
typedef struct machine_m
{
word * current;
int line_in_memo;
char * sign_name;
struct machine_m * next_line;
}Machine_Memo;
功能:
/*Adding a word to the memory.*/
void add_to_mem(word * wrd, int line, char * sign_name)
{
Machine_Memo * temp = NULL, *next = NULL;
if (machine_code == NULL)
{
machine_code = (Machine_Memo *)malloc(sizeof(Machine_Memo));
if (machine_code == NULL)
{
printf("Memory allocation has failed.");
exit(1);
}
machine_code->current = wrd;
machine_code->line_in_memo = line;
machine_code->sign_name = sign_name;
machine_code->next_line = NULL;
}
else
{
printf("token has been reached");
temp = machine_code;
next = (Machine_Memo *)malloc(sizeof(Machine_Memo)); //Line of error
if (next == NULL)
{
printf("MEMORY ALLOCATION HAS FAILED. EXITING PROGRAM.\nThe problem has occured on code line %d", 775);
exit(0);
}
next->current = wrd;
next->line_in_memo = line;
next->sign_name = sign_name;
next->next_line = NULL;
while (temp->next_line != NULL)
{
temp = temp->next_line;
temp->next_line = next;
}
}
}
【问题讨论】:
-
避免使用全局变量(即
machine_code) -
可以,但只是为了从中学习——为什么不使用全局变量?
-
显然,全局变量不好,因为私有封装好。研究私有封装。
-
问题未重现。但无论如何,函数中的每个
malloc都会泄漏大量内存。您不必将指向word的指针保留在您的机器中。
标签: c visual-studio malloc heap-memory