今天學了鏈表,在堆上手動開辟并賦值后可以正常運行,但是最后提示警告:取消對NULL指標“node”的參考,實在想不到是哪里有問題,求助各位大佬,還是個新手,請各位輕噴

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Teacher
{
char name[64];
int age;
char sex[12];
struct Teacher* LinkNode;
};
void distr()
{
struct Teacher* node1 = malloc(sizeof(struct Teacher));
struct Teacher* node2 = malloc(sizeof(struct Teacher));
struct Teacher* node3 = malloc(sizeof(struct Teacher));
struct Teacher* node4 = malloc(sizeof(struct Teacher));
struct Teacher* node5 = malloc(sizeof(struct Teacher));
struct Teacher* node6 = malloc(sizeof(struct Teacher));
//手動為每一個老師的屬性賦值
node1->age = 24; strcpy(node1->name, "李老師"); strcpy(node1->sex, "男");
node2->age = 41; strcpy(node2->name, "吳老師"); strcpy(node2->sex, "女");
node3->age = 32; strcpy(node3->name, "周老師"); strcpy(node3->sex, "男");
node4->age = 34; strcpy(node4->name, "黃老師"); strcpy(node4->sex, "男");
node5->age = 28; strcpy(node5->name, "王老師"); strcpy(node5->sex, "女");
node6->age = 33; strcpy(node6->name, "薛老師"); strcpy(node6->sex, "女");
//建立鏈表中的關系
node1->LinkNode = node2;
node2->LinkNode = node3;
node3->LinkNode = node4;
node4->LinkNode = node5;
node5->LinkNode = node6;
node6->LinkNode = NULL;
//遍歷并列印鏈表
struct Teacher* Ptemp = node1;
while (Ptemp != NULL)
{
printf("老師的名字是:%s\t性別是:%s\t年齡是:%d\n",Ptemp->name,Ptemp->sex,Ptemp->age);
Ptemp = Ptemp->LinkNode;
}
//釋放鏈表
free(node6); free(node5); free(node4); free(node3); free(node2); free(node1);
}
int main()
{
distr();
system("pause");
return EXIT_SUCCESS;
}
uj5u.com熱心網友回復:
struct Teacher* node1 = (struct Teacher *) malloc(sizeof(struct Teacher));其他幾個也都如此處理
別的地方沒有問題
uj5u.com熱心網友回復:
1樓大佬這個方法還是不行啊,VS2019上還是提示一樣的警告。。。非常感謝大佬的回復
uj5u.com熱心網友回復:
把警告的地方貼出來, 在哪行? 警告的具體原文是什么?uj5u.com熱心網友回復:
嚴重性 代碼 說明 專案 檔案 行 禁止顯示狀態 詳細說明
警告 C6011 取消對 NULL 指標“node1”的參考。 day06 C:\USERS\ADMINISTRATOR\DESKTOP\單向動態鏈表.C 25
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
警告的意思是讓你檢查指標是否是NULL的意思你這個是VS2019?
VS2019下strcpy都變成strcpy_s了, 而且提示啥時候變成這樣的中文說明了
if ( node1 != NULL ) {
node->age = ......
}
uj5u.com熱心網友回復:
或者,在25行賦值之前統一寫一行if ( NULL ==node1 || NULL==node2 || ..... ) return;
它這個檢測就是讓你malloc后要有一個對NULL的判斷之后再做其他的處理
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113111.html
標籤:C語言
上一篇:[PAT]一道題。有兩個測驗點過不去,不知問題出在哪里。。。
下一篇:運行了好多遍,就是行不通,求大佬
