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

Unhandled exception - how to solve it, c++

本文关键字:解决 c++ 异常 何解决 未处理      更新时间:2023-10-16

我的这个程序有问题。成功编译程序后,编译器会给我以下信息:"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 thrownn";
    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, '', 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;
}

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

f("fr rewfer ewr");

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

char*f(const char* word) ;

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

所有问题都在中

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

当f重新获得nullptr 时