- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好?我正在学习双向链表
反正我以前在node上放数据的时候出现C6011错误
[:取消引用空指针'NewNode']
所以我引用了https://docs.microsoft.com/ko-kr/visualstudio/code-quality/c6011?view=vs-2019和
试图检查空值。但它没有用..
我检查了错误窗口的一些细节,如我添加的图片
他们说“NewNode 将为 NULL”,“即使取消引用,NewNode 仍将是 NULL”
代码如下
1.头文件(DoubleLinkedList.h)
#pragma once
#ifndef DOUBLY_LINKEDLIST_H
#define DOUBLY_LINKEDLIST_H
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElementType;
typedef struct MyNode
{
ElementType Data;
struct MyNode* Prev;
struct MyNode* Next;
}Node;
Node* DLL_CreateNode(ElementType NewData); //1.create node
void DLL_DestroyNode(Node* Node);//2.destroy node
void DLL_AppendNode(Node** Head, Node* NewNode);//3.append node
/*
4.insert node
connect
prev-insert-next
*/
void DLL_InsertAfter(Node* Current, Node* NewNode);
void DLL_RemoveNode(Node** Head, Node* Remove);//5.remove node
Node* DLL_GetNodeAt(Node* Head, int location);//6.search node
int DLL_GetNodeCount(Node* Head);//7.count the number of nodes
#endif
#include "DoubleLinkedList.h"
Node* DLL_CreateNode(ElementType NewData)
{
//create node with memory allocation
Node* NewNode = (Node*)malloc(sizeof(Node));
//nullptr check for c6011(https://docs.microsoft.com/ko-kr/visualstudio/code-quality/c6011?)
if (NewNode)
{
NewNode->Data = NewData;
NewNode->Prev = NULL;
NewNode->Next = NULL;
}
return NewNode;
}
void DLL_DestroyNode(Node* Node)
{
free(Node);
}
void DLL_AppendNode(Node** Head, Node* NewNode)
{
if ((*Head) == NULL)
{
*Head = NewNode;
}
else
{
Node* Tail = (*Head);
while (Tail->Next != NULL)
{
Tail = Tail->Next;
}
Tail->Next = NewNode;
NewNode->Prev = Tail;
}
}
void DLL_InsertAfter(Node* Current, Node* NewNode)
{
NewNode->Prev = Current->Next;
NewNode->Next = Current;
if (Current->Next != NULL)
{
Current->Next->Prev = NewNode;
Current->Next = NewNode;
}
}
void DLL_RemoveNode(Node** Head, Node* Remove)
{
if (*Head == Remove)
{
*Head = Remove->Next;
if (*Head != NULL)
{
(*Head)->Prev = NULL;
}
Remove->Next = NULL;
Remove->Prev = NULL;
}
else
{
Node* Temp = Remove;
if (Remove->Prev != NULL)
{
Remove->Prev->Next = Temp->Next;
}
if (Remove->Next != NULL)
{
Remove->Next->Prev = Temp->Prev;
}
Remove->Prev = NULL;
Remove->Next = NULL;
}
}
Node* DLL_GetNodeAt(Node* Head, int location)
{
Node* Current = Head;
while (Current != NULL && (--location) >= 0)
{
//--location >=0 is for check index
Current = Current->Next;
}
return Current;
}
int DLL_GetNodeCount(Node* Head)
{
int count = 0;
Node* Current = Head;
while (Current != NULL)
{
Current = Current->Next;
count++;
}
return count;
}
#include "DoubleLinkedList.h"
int main()
{
int i = 0;
int Count = 0;
Node* List = NULL;
Node* Current = NULL;
Node* NewNode = NULL;
//create&append nodes
for (i = 0; i < 5; i++) {
NewNode = DLL_CreateNode(i);
DLL_AppendNode(&List, NewNode);
}
Count = DLL_GetNodeCount(List);
for (i = 0; i < Count; i++) {
Current = DLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
Current = DLL_GetNodeAt(List, 2);
NewNode = DLL_CreateNode(3000);
DLL_InsertAfter(Current, NewNode);
Count = DLL_GetNodeCount(List);
for (i = 0; i < Count; i++) {
Current = DLL_GetNodeAt(List, i);
printf("List[%d] : %d\n", i, Current->Data);
}
for (i = 0; i < Count; i++) {
Current = DLL_GetNodeAt(List, 0);
if (Current != NULL) {
DLL_RemoveNode(&List, Current);
DLL_DestroyNode(Current);
}
}
return 0;
}
最佳答案
这是来自静态分析器的警告。编译器说可能有一些潜在的错误。
事实上,在 DLL_CreateNode 中有一个对 malloc 的调用可能会失败并返回一个 NULL。你在函数内部检查它,这很好。
但是如果 malloc 失败,你仍然会在 main.c 中向调用者返回一个 NULL。
NewNode = DLL_CreateNode(i); //<-- this could return NULL
DLL_AppendNode(&List, NewNode);
NewNode->Prev = Tail;
关于c - VS2019 C6011 错误取消引用空指针 'NewNode',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152437/
我不确定我做错了什么。我的程序看起来正确,但根据 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
我是一名优秀的程序员,十分优秀!