- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定我做错了什么。我的程序看起来正确,但根据 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/
我不确定我做错了什么。我的程序看起来正确,但根据 valgrind 的说法,我的 newNode 函数显然存在内存泄漏。我想知道我在 newNode 函数中做错了什么以及为什么它是错误的。 代码是:
你好?我正在学习双向链表 反正我以前在node上放数据的时候出现C6011错误 [:取消引用空指针'NewNode'] 所以我引用了https://docs.microsoft.com/ko-kr/v
当我编译以下 C 代码时,gcc 报错说在 return newNode 行中未声明“newNode”,但我不明白为什么。谁能解释这个错误或如何解决它? node *insertNode(node *
嗨,谁能帮我解决我遇到的 LinkedList 问题。我正在尝试将存储 OBJ 的节点添加到列表的末尾,但我似乎无法理解为什么它不起作用。以下是我到目前为止的代码: public void addLa
**** 因为我已经创建了一个名为 createNode(int) 的函数,它将返回一个类型为 struct node* 的内存块,但我没有提到 return(temp) 代码仍然可以正常工作,就像插
我刚刚重新开始编码。已经有几年了。我不明白为什么会引发 nullptr 访问冲突。我把它压缩成一行代码。当我尝试将我的第二个条目(newNode 的 pLast 指针)设置为 head 时,会引发违规
使用 Visual Studio Code 编辑 javascript 时,我不断收到一个无用且突兀的弹出窗口,显示某种不相关的方法签名 打字时它也不会消失。即使转义也不会删除它,但通常会点击其他一些
我正在用 C++ 编写计算二叉树中根到叶路径总数的代码。 #include #include #include #include using namespace std; struct node
这几天我一直在试图解决这个问题,但我所做的一切都是错误的。对于 buildList 方法中 newNode.next 上的 .next,我不断收到“无法解析或不在字段中”错误。对于 printList
我是一名优秀的程序员,十分优秀!