我遇到了这个程序的麻烦。
编译器在成功编译程序后给出了这个:
“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;
}
答案 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
时