如何追溯错误

时间:2016-03-01 02:53:51

标签: c++ debugging logic stdstring terminate

我被分配创建一个数组检查(以查看数组是增加,减少,还是两者都没有[然后如果两者都没有退出])和一个递归二进制搜索我的一个任务。在得到同行的帮助后,我能够做到这些,但我需要帮助才能找到导致错误的原因

在抛出'std :: logic_error'的实例后终止调用   what():basic_string :: _ S_construct null无效 中止

运行代码时。我用Google搜索了这个错误,这个错误似乎很模糊,或者我只是不理解。它编译没有错误,但我需要帮助找到我做错了什么。它能够在没有binarySearchR函数及其关联代码的情况下运行,因为数组检查本身就是先前的赋值。下面是代码,我提前非常感谢你!

#include <iosteam>
#include <string>
#include <cstdlib>
#include <fstream>

using namespace std;

int checkArraySort (string *fileLines, int numberOfLines);
int binarySearchR (string *fileLines, string searchKey, int iMin, int iMax);

int main ()
{
int numberOfLines = 0;
    string searchKey = 0;

    cout << "Input search key: ";
    cin >> searchKey;

        ifstream fileIn;
        fileIn.open("words_in.txt");

        string line;

        if (fileIn.eof()) /* Checks file to see if it is blank before proceeding */
        {
                exit (EXIT_SUCCESS);
        }

    else
    {
        while(!(fileIn.eof()))
        {
                    fileIn >> line;
                    numberOfLines++;
      }

            fileIn.close(); /* closes fileIn, need to reopen to reset the line location */
            fileIn.open("words_in.txt");

            string *fileInLines;
            fileInLines = new string[numberOfLines];

            for (int i = 0; i < numberOfLines; i++)
            {
                    fileIn >> line;
                    fileInLines[i] = line;
            }

            fileIn.close(); /* closes fileIn */

        int resultingCheck = checkArraySort(fileInLines, numberOfLines);

        if (resultingCheck == -1)
        {
            cout << "The array is sorted in descending order." << endl;
        }

        else if (resultingCheck == 1)
        {
            cout << "The array is sorted in ascending order." << endl;
        }

        else
        {
            cerr << "ERROR: Array not sorted!" << endl;
            exit (EXIT_FAILURE);
        }

        int searchResult = binarySearchR (fileInLines, searchKey, 0, numberOfLines);

        if (!searchResult == -1)
        {
            cout << "Key found at index " << searchResult << "." << endl;
        }

        else
        {
            cout << "Key not found at any index." << endl;
        }

            exit (EXIT_SUCCESS);
    }
}

int checkArraySort (string *fileLines, int numberOfLines)
{
    int result = 1; /* Ascending by default */

    for (int i = 1; i < numberOfLines; i++) /* Checks if decending */
    {
        if (fileLines[i] < fileLines[i-1])
        {
            result = -1;
        }
    }

    if (result == -1) /* Makes sure it is descending (or if it is neither) */
    {
        for (int i = 1; i < numberOfLines; i++)
        {
            if (fileLines[i] > fileLines[i-1])
            {
                result = 0;
            }
        }
    }

    return result;
}

int binarySearchR (string *fileLines, string searchKey, int iMin, int iMax)
{
    // so, its gotta look at the center value and each times, it discards half of the remaining list.

    if (iMax < iMin) /* If the minimum is greater than the maximum */
    {
        return -1;
    }

    else
    {
        int iMid = (iMin + iMax) / 2;

        if (fileLines[iMid] > searchKey) /* If the key is in the lower subset */
        {
            return binarySearchR (fileLines, searchKey, iMin, iMid - 1);
        }

        else if (fileLines[iMid] < searchKey) /*If the key is in the upper subset */
        {
            return binarySearchR (fileLines, searchKey, iMin, iMid + 1);
        }

        else /*If anything else besides the two */
        {
            return iMid;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

简单方法:添加一堆cout以查看您的程序所在位置以及值是什么。

赞成

  • 易于操作

缺点

  • 每次要添加更多信息时都需要重新编译

困难:学习使用调试器

赞成

  • 可以随时检查&#34;
  • 不需要重建
  • 可以使用您在其他所有C ++程序中学到的知识

缺点

  • 需要进行一些研究才能学会如何做。