我正在尝试编译我的代码,但我无法编译它。我正在使用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;
}
答案 0 :(得分:5)
它几乎告诉你错误是什么:在初始化之前使用变量,因此你正在调用未定义的行为。
ZOZNAM *p_prvy;
p_prvy->next = NULL;
是错误的,因为你没有为p_prvy
分配内存,但你取消引用它。为您的数据类型创建一个构造函数(并考虑您的设计)。
答案 1 :(得分:3)
在main()
函数中,您有p_prvy
变量的以下声明:
ZOZNAM * p_prvy;
在此之后,你会说:
p_prvy->next = NULL;
这意味着您正在使用p_prvy
变量。但是,它没有被初始化,因此具有未指定的值。这称为Undefined Behavior,或简称为UB。
您需要做的是初始化该指针。例如,通过分配一些内存:
ZOZNAM * p_prvy = (ZOZNAM *)malloc(sizeof(ZOZNAM));
您可能还将其初始化为NULL,但是取消引用NULL将使您的进程失效。