CDCDCDCD指针。创建堆栈

时间:2017-01-21 20:38:03

标签: c++ list pointers structure

我有两个功能

int zapiszGenotyp(genotyp *p, int dlugoscGenotypu, int genDoWpisania)
{
    if (!p)
    {
        genotyp *nowy = new genotyp;
        nowy->pNext = 0;
        p = nowy;
        nowy->gen = genDoWpisania;
        dlugoscGenotypu++;
    }
    else if (p->pNext == 0)
    {
        genotyp *nowy = new genotyp;
        nowy->pNext = 0;
        p->pNext = nowy;
        nowy->gen = genDoWpisania;
        dlugoscGenotypu++;
    }
    else
        zapiszGenotyp(p->pNext, dlugoscGenotypu, genDoWpisania);

    return dlugoscGenotypu;
}





void stworzListeOsobnikow(osobnicy *& p, ifstream & input)
{
    while (input)
    {
        if (p==0)
        {
            p = new osobnicy;
            string linia;
            getline(input, linia);
            istringstream strumien(linia);
            int gen;

            while (strumien >> gen)
            {
                p->dlugoscDNA = zapiszGenotyp(p->pGeny, 0, gen);
            }


            p->pNext = 0;

            double(*wybraneDopasowanie)(genotyp*);
            wybraneDopasowanie = dopasowanie1;
            p->dopasowanie = wybraneDopasowanie(p->pGeny);

        }
        else if (p->pNext == 0)
        {

        osobnicy *nowy = new osobnicy;
        string linia;
        getline(input, linia);
        istringstream strumien(linia);
        int gen;

        while (strumien >> gen)
        {
            nowy->dlugoscDNA=zapiszGenotyp(nowy->pGeny, 0, gen);
        }

        nowy->pNext = 0;
        p->pNext = nowy;

        double(*wybraneDopasowanie)(genotyp*);
        wybraneDopasowanie = dopasowanie1;
        p->dopasowanie = wybraneDopasowanie(p->pGeny);

    }
    else
        stworzListeOsobnikow(p->pNext, input);
}

他们使用以下结构

struct genotyp
{   
    genotyp * pNext;        
    int gen;                
};

struct osobnicy
{

    osobnicy * pNext;   
    genotyp * pGeny;        
    int dlugoscDNA;         
    double dopasowanie;     
};

当我尝试运行代码时,它会在stworzListeOsobnikow()运行zapiszGenotyp()时停止。我已经意识到,作为genotyp * p传递给zapiszGenotyp()的指针始终是CDCDCDCD,但我不知道它意味着什么。只是在zapiszGenotyp()中使用p-> pNext会使程序崩溃。任何人都可以向我解释这个CDCDCDCD指针是什么,以及我的代码似乎有什么问题?

1 个答案:

答案 0 :(得分:0)

您永远不会初始化任何指针,并且尝试取消引用未初始化指针(或从任何未初始化的变量读取)时的行为未定义。当您在调试模式下编译时,许多编译器会使用一些独特的模式(如0xCDCDCDCD)填充未初始化的内存,以使这些错误更明显。

您需要在结构中添加构造函数,将其成员初始化为某个初始值,或者确保以其他方式初始化其成员。