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是数组的大小,从文件中读取。
我做错了什么:(
答案 0 :(得分:2)
您永远不会初始化i
所以当您检查i < tempC
然后将其用于tempDB[i]
时,i
可能值得任何事情< / strong> - 说-929373
,导致完全在你的过程边界之外解决(如果你很幸运,因为这至少会立即产生错误 - 如果你运气不好,你最终会被毁灭随机数据,并在稍后的某个时间点产生可怕的,不可能调试的错误。)
使用int i = 0;
代替,以避免未初始化变量的诅咒! - )
答案 1 :(得分:1)
您没有将i初始化为0,或者您想要开始编制索引的任何内容。
另外注意,如果像seg-fault这样的错误使用Valgrind [valgrind.org] - 它有助于在几秒钟内发现错误。在你的情况下,索引内存访问 - 这些是Valgrind专门检测的东西。