Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未处理的异常-如何解决它,c++;_C++_Pointers_Error Handling_Constants - Fatal编程技术网

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

C++ 未处理的异常-如何解决它,c++;,c++,pointers,error-handling,constants,C++,Pointers,Error Handling,Constants,我对这个程序有困难。 成功编译程序后,编译器给我以下信息: “0x0f6bd540(msvcr100d.dll)”of“progBUS.exe”中未处理的异常 程序出了什么问题,因为一切似乎都正常工作,但最后,在按“Enter”退出控制台后,给出了错误-未处理的异常。如何修复它? 非常感谢 # include <iostream> # include <cstring> using namespace std; template < class T> vo

我对这个程序有困难。 成功编译程序后,编译器给我以下信息: “0x0f6bd540(msvcr100d.dll)”of“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;
}
#包括
#包括
使用名称空间std;
模板
真空开关(T&a、T&b){
tc=a;
a=b;
b=c;
}
char*f(char*word){
静态字符*ss(“u”);
静态积分iter(0);

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

f("fr rewfer ewr");
文字字符串可能位于只读内存中。您需要保证不更改它:

char*f(const char* word) ;
你有
s(“U”);
ss=word;
所以你也需要:
static const char*ss;
但是作为
ss
static
您需要确保
ss
的内容在通话之间保持有效。是否复制word? 现在,您有了
ret[15]
,并且只将0设为14。为什么不设15?而且您无法控制在其中写入的字符数可能超过14个。F可以返回
nullptr
,但在主要情况下,您不必测试
nullptr
。 如果你使用<代码> STD::String 和其他C++标准库设施,你的一些问题可能消失。

< P>所有问题都在

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

coutI不明白,您开始调试,然后停下来问这个问题?
char*ss(“u”)
这应该是
const char*
而且
char*word
也应该是
const char*
的。看起来你在试图在只读内存中写东西。你不需要与错误作斗争,你需要发现、理解和修复错误。你的
memset
太小,你从不检查
f
是否返回
nullptr
。你应该好的!谢谢你,我们不能在屏幕上输出nullptr)@VasiliyPetechkin:你可以输出一个nullptr。你不能输出它指向的内容。不要混淆这两件事,因为它是所有内存管理问题的根源