C++ 未处理的异常-如何解决它,c++;
我对这个程序有困难。 成功编译程序后,编译器给我以下信息: “0x0f6bd540(msvcr100d.dll)”of“progBUS.exe”中未处理的异常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
程序出了什么问题,因为一切似乎都正常工作,但最后,在按“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。你不能输出它指向的内容。不要混淆这两件事,因为它是所有内存管理问题的根源