堆栈溢出错误c ++。如何修改/修复此代码以摆脱这个问题?

时间:2014-11-12 19:01:04

标签: c++ stack-overflow

我收到了堆栈溢出错误/异常(当我搜索错误时没有弹出,运行后它会崩溃)并且我没有看到错误。请帮忙 。这是我的代码:

#include<iostream>
#include<fstream>
#include<stdio.h>
#include<conio.h>
#include<string>
#include<algorithm>

using namespace std;

int verify(string v, string y[], int m);
int rearrange(string x,string a[],int m)
{
    int TempNumOne = x.size();
    char y[15];
    for (int i = 0; i <= TempNumOne; i++)
    {
        y[i] = x[i];
    }
    next_permutation(y, y + TempNumOne);
    x = y; 
    verify(x, a, m);
    return 0;

}

int verify(string v, string y[], int m)
{
    int z = 0;
    for (int j = 0; j < m; j++)
        if (v == y[j])
        {
        z++;
        cout << v << endl;
        }
        else
            rearrange(v,y,m); // the code is stoping here and it gives me a "unhandheld exception"

    return z;

}

int main()
{
    int i = 0, n = 0, j = 0, m = 0;
    string x[100];
    string y[2000];
    string a;
    string b;
    ifstream myfile2("wordlist.txt"); 
    fstream myfile("word.txt"); 
    if (myfile.is_open())
    {
        while (getline(myfile, a)) 
        {
            x[i] = a;
            i++; n++;
        }
    }
    else
        cout << "Unable to open file!";

    if (myfile2.is_open())
    {
        while (getline(myfile2, b))
        {
            y[j] = b; 
            j++; m++;
        }
    }
    else
        cout << "Unable to open file!";
    myfile.close();
    myfile2.close();
    i = 0;
    while (i <= 15)
    {
        string v = x[i];
        i = verify(v, y, m);
    }
    getchar();
    return 0;
}

我正在尝试执行一个程序,从文件中获取多个单词(乱码),将它们(1乘1)与第二个文件中的所有单词进行比较,看看是否有匹配(通过使用& #34;验证&#34;功能),如果匹配显示该字到屏幕并转到下一个,如果没有,使用重新排列功能重新排列字中的字母然后再次使用验证功能查看是否它得到一个匹配(等等)。我能做些什么来使这个代码工作,我没有想法。

稍后编辑: 我用一个函数来做,看看两个wordS(一个来自word.txt,一个来自wordlist.txt)是字谜。这是函数:

bool is_anagram(string s1, string s2)
{
    std::sort(s1.begin(), s1.end());
    std::sort(s2.begin(), s2.end());
    return s1 == s2;
}

1 个答案:

答案 0 :(得分:1)

您的verify()rearrange()函数中有循环递归,没有任何特定条件结束递归。这就像一个无限循环,只涉及堆栈上的内存分配(这是有限的)。

正确格式化代码,看看出了什么问题,尤其是这部分

int verify(string v, string y[], int m) {
    int z = 0;
    for (int j = 0; j < m; j++) { // << open a proper block
        if (v == y[j]) {
            z++;
            cout << v << endl;
        }
        else {
            return rearrange(v,y,m);
         // ^^^^^^ Looks like you're supposed at least to return the recursive 
         //        calls result.
        }
    }
    return z;    
}