C - 变量 'p_prvy' 正在使用而未初始化
C - The variable 'p_prvy' is being used without being initialized
我正在尝试编译我的代码,但我无法编译它。我正在使用VS 2010,并收到以下消息:
"Tel_zoznam.exe":已加载"C:\Windows\SysWOW64\msvcr100d.dll",已加载符号。 运行时检查失败 #3 - 变量"p_prvy"正在使用未初始化。
它停在p_prvy->next = NULL;
这是我的代码:
#include "stdafx.h"
#define MAX 31
typedef struct ZOZNAM{
char meno[MAX];
char priezvisko[MAX];
char cislo1[MAX];
char cislo2[MAX];
char cislo3[MAX];
struct ZOZNAM *next;
} ZOZNAM;
int main(void){
char c;
ZOZNAM * p_prvy;
ZOZNAM * p_akt;
p_prvy->next = NULL;
int z;
p_akt=p_prvy;
printf(" Pre pridanie kontaktu do zoznamu stlacte 'p'n Pre vypis zoznamu zadajte 'v'n Pre ukoncenie programu zadajte 'k'n");
z=pocet_zaznamov();
printf("%d",z);
while(1==1){
scanf("%c",&c);
switch(c){
case 'p': vlozit(p_akt); break;
case 'v': vypis(p_prvy); break;
case 'n': nacitanie(p_akt); break;
}
}
return 0;
}
它几乎告诉你错误是什么:你在初始化变量之前使用它,因此你正在调用未定义的行为。
ZOZNAM *p_prvy;
p_prvy->next = NULL;
是错误的,因为您尚未为p_prvy
分配内存,但已取消引用它。为您的数据类型创建一个构造函数(并考虑您的设计)。
在 main()
函数中,您有以下 p_prvy
变量声明:
ZOZNAM * p_prvy;
几乎在那之后,你说:
p_prvy->next = NULL;
这意味着您正在使用p_prvy
变量。但是,它未被初始化,因此具有未指定的值。这称为未定义行为,或简称为 UB。
您需要做的是初始化该指针。例如,通过分配一些内存:
ZOZNAM * p_prvy = (ZOZNAM *)malloc(sizeof(ZOZNAM));
您也可以将其初始化为 NULL,但随后取消引用 NULL 将使进程关闭。
相关文章:
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 在 C++ 中访问 lambda 捕获初始化变量
- 为什么C++不支持对未初始化变量进行智能分析?
- 使用 clang++ 和 g++ 在C++中初始化变量
- C++使用 lambda 初始化变量
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++ - 输出与初始化变量不同?
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 具有静态存储持续时间的常量初始化变量的初始化顺序
- C++ 中的初始化变量
- C++中未初始化变量的值
- 如何在需要提及需要循环声明的其他类的类中初始化变量?
- 我想知道在构造函数中初始化变量时的生命周期
- 读取恰好具有良好值的未初始化变量
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 为什么在 c++ 中有多种初始化变量的方法
- 没有参数的默认构造函数是否总是初始化变量?
- 是否可以使用 lambda 初始化变量(删除复制 ctor 时)
- 使用构造函数跳闸UB的新放置后使用初始化变量