无法声明变量Char []

时间:2010-09-12 04:50:20

标签: c++

struct Movie
{
    char* date;
    char* title;
    char* rating;
    int runtime;
};

typedef Movie* moviePtr;
moviePtr tempDB;

bool doStuff()
{
//... snip .,,
    tempDB = new Movie[tempC];
    int i;

    ifs >> temp;
    while(ifs.good() && i < tempC)
    {
        tempDB[i].date = new char[strlen(temp)+1];
        strcpy(tempDB[i].date, temp);
//... snip ...

}

当我运行时,我得到一个分段错误(在线tempDB [i] .date = new char [strlen(temp)+1];我调试了它)

tempC是数组的大小,从文件中读取。

我做错了什么:(

2 个答案:

答案 0 :(得分:2)

您永远不会初始化i所以当您检查i < tempC然后将其用于tempDB[i]时,i可能值得任何事情< / strong> - 说-929373,导致完全在你的过程边界之外解决(如果你很幸运,因为这至少会立即产生错误 - 如果你运气不好,你最终会被毁灭随机数据,并在稍后的某个时间点产生可怕的,不可能调试的错误。)

使用int i = 0;代替,以避免未初始化变量的诅咒! - )

答案 1 :(得分:1)

您没有将i初始化为0,或者您想要开始编制索引的任何内容。

另外注意,如果像seg-fault这样的错误使用Valgrind [valgrind.org] - 它有助于在几秒钟内发现错误。在你的情况下,索引内存访问 - 这些是Valgrind专门检测的东西。