gpt4 book ai didi

c - newNode 内存泄漏/分段故障

转载 作者:行者123 更新时间:2023-11-30 14:20:51 24 4
gpt4 key购买 nike

我不确定我做错了什么。我的程序看起来正确,但根据 valgrind 的说法,我的 newNode 函数显然存在内存泄漏。我想知道我在 newNode 函数中做错了什么以及为什么它是错误的。

代码是:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include "list.h"
typedef struct lnode {
char *term;
int count;
int last;
struct lnode *next;
}lnode,*lnodePtr;
/**
* Returns a new linked list node filled in with the given word and line, and
* sets the count to be 1. Make sure to duplicate the word, as the original word
* may be modified by the calling function.
*/
struct lnode *newNode (char* word, int line) {
lnode *add=malloc(sizeof(lnode));
add->term=(char *)malloc(strlen(word) + 1);
strcpy((add -> term), word);
add->count=1;
add->last=line;
add->next=NULL;
return add;
}
int main(int argc, char *argv[])
{
lnodePtr head=NULL;
char example[1000]="Name";
char *ex=example;
lnode *amc=newNode(ex,2);
return(0);
}

那么是不是我的 main 函数有问题,而 newNode 函数没有问题?我是链表新手,所以你能帮我写一下 freeNode 吗?我认为 freeNode 与我的 deleteNode 类似(显然它不能修复内存泄漏)。我的删除节点的代码是:

void deleteNode (struct lnode** head, struct lnode* node) {
if(*head == NULL)
return;

if((node == *head)&&(((*head) -> next) != NULL))
{
*head = (*head) -> next;
}
else if((node == *head)&&(((*head) -> next) == NULL))
{
void *p = NULL;
*head = (lnodePtr)p;
}
else
{
lnode *temp;
temp=node;
node=node->next;
free(temp);
}
free(node);
}

最佳答案

... there is a memory leak in my newNode function ...

好吧,您分配了一些内存(使用malloc)并且从未释放它(使用free)。这就是内存泄漏的定义。

你的 main 应该看起来像这样才不会泄漏:

int main(int argc, char *argv[])
{
lnodePtr head=NULL;
char example[1000]="Name";
char *ex=example;
lnode *amc=newNode(ex,2);
// actual work?
freeNode(amc);
}

现在,您还需要编写 freeNode 方面的帮助吗?

关于c - newNode 内存泄漏/分段故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15061298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com