未处理的异常 - 如何解决它,c ++

时间:2013-02-08 08:12:15

标签: c++ pointers error-handling const

我遇到了这个程序的麻烦。 编译器在成功编译程序后给出了这个: “0x0f6bd540(msvcr100d.dll)”中的未处理异常“progBUS.exe”
程序有什么问题,因为一切似乎都运行良好,但最后,在按“Enter”退出控制台后,错误 - 给出了未处理的异常。怎么解决? 非常感谢!

# include <iostream>
# include <cstring>

using namespace std;

template < class T>
void switcher(T &a, T &b){
    T c=a;
    a=b;
    b=c;
}

char* f(char* word){
    static char* ss("u");
    static int iter(0);

    cout<<"word \""<<word<<"\" has been thrown\n";
    if ( strcmp(word,ss)!=0 && strcmp(word,"")!=0) {ss=word; iter=0;} //if another word has been thrown
    cout<<"ss="<<ss<<"  iter="<<iter<<endl;
    static char ret[15];//return word value
    memset(ret, '\0', 14);//clean up ret value

    int len = strlen(ss);
    int j=0;
    if (iter == len-1) return nullptr;//we have reached the end of word

    for (int i=iter;i<len;i++){
        //cout<<"*(ss+i)="<<*(ss+i)<<endl;
        if (*(ss+i)!=' ') ret[j]=*(ss+i);
        else { iter=i+1; return ret;}
        //cout<<*(ss+i);
        j++;
        if(i==len-1) {iter=i+1; return ret;}
    }
    return nullptr;
}

int main(){
    int a=1,b=2;

    cout<<f("fr rewfer ewr")<<endl;
    cout<<f("fr rewfer ewr")<<endl;
    cout<<f("43 34")<<endl;
    cout<<f("")<<endl;
    cout<<f("")<<endl;
    cout<<f("fr rewfer ewr")<<endl;
    //char ss[]("fr rewfer ewr");
    //size_t len = (sizeof ss)/(sizeof ss[0]);
//  cout<<"len="<<len<<endl;

    system("PAUSE");
    return 0;
}

2 个答案:

答案 0 :(得分:3)

你需要一些纪律。你想使用:

f("fr rewfer ewr");

文字字符串可能位于只读内存中。你需要承诺不要改变它:

char*f(const char* word) ;

你有s("U");ss=word;,所以你也需要static const char* ss; 但要ss static,您需要确保ss的内容在通话之间保持有效。复制一个单词? 现在,你有ret[15]并且仅为0。为什么不是15?并且您无法控制您可能在其中写入超过14个字符。 F可以返回nullptr,但在您的主要内容中,您不会测试nullptr。 如果使用std::string和其他C ++标准库工具,您的一些问题可能会消失。

答案 1 :(得分:0)

所有问题都在

cout<<f("")<<endl;

当f返回nullptr