初始化char *的向量对我的计算机做了疯狂的事情

时间:2015-10-22 08:37:24

标签: c++ vector

我正在努力解决这个难题:http://www.puzzleup.com/2015/puzzle/?13

要做到这一点,我想计算所有可能的代码并将它们传递给向量

  

您将使用字母A,B生成一组7个字母的代码,   C,D,E,F和G

所以我尝试创建char数组的向量。代码在下面分享:

#include <iostream>
#include <string>
#include <vector>
#include <array>
#include <cmath>

char letters[] = {'a','b','c','d','e','f','g'};

char * tempArr;
char * pastArr;


std::vector<char * > deneme;
char s1[] = {'a', 'b'};
char s2[] = {'c', 'd'};

void calculateAllPossibilities(int depth, int lastDepth)
{
    //depth 1 den baþlayacak
    for( int i = 0; i < sizeof(letters); i++ )
    {
        //

        if ( depth != 1 && depth != lastDepth )
        {
            //
            tempArr = new char[depth];
            for( int j = 0; j < depth-1; j++ )
            {
                //
                *tempArr = pastArr[j];
                tempArr++;
            }
            *tempArr = letters[i];
            for( int x = 0; x < depth; x++ )
            {
                //
                std::cout << tempArr[x] << ",";
            }
            std::cout << std::endl;
            delete pastArr;
            pastArr = new char[depth];
            for( int k = 0; k < depth; k++ )
            {
                //
                *pastArr = tempArr[k];
                pastArr++;
            }
            delete tempArr;
            calculateAllPossibilities(depth + 1, lastDepth );
        }
        else if( depth == lastDepth )
        {
            //
            tempArr = new char[depth];
            for( int k = 0; k < depth - 1; k++ )
            {
                //
                *tempArr = pastArr[k];
                tempArr++;
            }
            *tempArr = letters[i];
            for( int x = 0; x < depth; x++ )
            {
                //
                std::cout << tempArr[x] << ",";
            }
            std::cout << std::endl;
            deneme.push_back(tempArr);
            delete tempArr;
        }
        else if( depth == 1 )
        {
            //
            pastArr = new char[depth];
            *pastArr = letters[i];
            std::cout << pastArr[0] << std::endl;
            delete tempArr;
            calculateAllPossibilities(depth + 1, lastDepth );
        }

    }
}

int main()
{

    calculateAllPossibilities(1,7);

    std::cout << deneme[0][2];

    return 0;
}

问题是,当我尝试在不使用函数中的cout时尝试deneme向量的值时,它在每个编译中给出了不同的东西。像那些:“:”,“_”,“X”,“2”:)

然而,然后我添加了couts功能,并试图看到发生了什么和BAM!在couts之后我的电脑变得疯狂了!

我在这里做错了什么?我第一次遇到这样的事情。

1 个答案:

答案 0 :(得分:2)

这根本不起作用

        deneme.push_back(tempArr);
        delete tempArr;

在向量中保存指向数组的指针,然后删除该数组。现在保存的指针无处可寻。

使用std::string的矢量可以更好地工作。

此外,当您使用tempArr = new char[depth];分配数组时,删除时也应使用[],例如delete[] tempArray。这让编译器知道你正在删除一个数组,而不只是一个char。这并不重要。