C - 正在使用变量'p_prvy'而不进行初始化

Mar*_*CIK 1 c c++ pointers linked-list visual-studio-2010

我正在尝试编译我的代码,但我无法编译它.我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

它几乎告诉你错误是什么:在初始化之前使用变量,因此你正在调用未定义的行为.

ZOZNAM *p_prvy;
p_prvy->next = NULL;
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为你还没有分配内存p_prvy但是你取消引用它.为您的数据类型创建一个构造函数(并考虑您的设计).

  • @Bracketworks:这是一本非常古老,非常好的书.强烈推荐. (2认同)