我无法解决这个问题,我几乎接受了这一事实,这可能是我的机器存在内存问题。

我有这个初始化器:

Search::Search(ifstream& inFile)
{

    int id = 0;
    int i = 0;

    inFile >> id;

    while (inFile) {

        if(i < SEARCH_DATA_SIZE) {

            SearchDataFirst[i] = id;
            SearchDataFirstSorted[i] = id;

        } else if(i >= SEARCH_DATA_SIZE) {

            SearchDataLast[i] = id;
            SearchDataLastSorted[i] = id;

        }

        i++;
        inFile >> id;
    }

}

在我的 header 中,我有如下私有(private)数据:



初始值设定项是从inFile获取前20个int,将其存储,然后转到下一个记录并将它们存储在单独的数组中,

当我打印数组时,SearchDataFirstSorted具有SearchDataLast的值,即使没有可能发生这种情况的方式也是如此。 SearchDataLastSorted具有奇怪的时髦数字。

SearchedDataFirst很好。

我从未对编程语言感到沮丧。

希望您能提供帮助。

没有其他事情发生,此时仅调用初始化程序。

最佳答案

问题是,如果i >= SEARCH_DATA_SIZE,则SearchDataLast[i]指向SearchDataLast之外!您真正需要的是这样的东西:

    for(int i = 0; i < SEARCH_DATA_SIZE; ++i)
    {
        inFile >> id;
        SearchDataFirst[i] = id;
        SearchDataFirstSorted[i] = id;
    }
    for(int i = 0; i < SEARCH_DATA_SIZE; ++i)
    {
        inFile >> id;
        SearchDataLast[i] = id;
        SearchDataLastSorted[i] = id;
    }

也就是说,您需要在完成i的填充之后和开始填充SearchDataFirst的操作之前将SearchDataLast重置为零。

08-27 01:40