调试时出现莫明其妙的错误~帮忙看看
调试时出现莫明其妙的异常~帮忙看看
程序这样的:求2的n次方~
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void f(int n)
{
if(n)
{
const int number = 2;
vector <int> vec(1,number);
/* 我在f函数设置了个断点,用F11单步调试,不明白为什么在这个地方出现了异常,但是翻了C++的书,这样初始化没有错啊,是调试的方法错误了,还是这里本身有问题?请各位高人指点啊~ */
int i = 1;
while(i != n)
{
vector <int> ::iterator iter = vec.begin();
for(;iter != vec.end(); ++iter)
{
if((iter++) != vec.end())
{
if(((*iter) * number) < 10)
(*iter) *= number;
else
{
(*iter) %= 10;
(*iter)++;
}
}
else
{
if(((*iter) * 2) < 10)
(*iter) *= 2;
else
{
(*iter) %= 10;
vec.push_back(1);
break;
}
}
}
i++;
}
vector <int> ::iterator j = vec.end() - 1;
while(j != vec.begin())
{
cout < < (*j);
j--;
}
j = vec.begin();
cout < < (*j);
return;
}
cout < < "1\n ";
return;
}
int main()
{
int n;
cout < < "Input the number: ";
cin > > n;
cout < < "The rusult is: ";
f(n);
system( "PAUSE ");
return 0;
}
我是在VS2005下调试的,各位要是有编译器的话,就帮忙调试看看了,
看看异常是在哪出现的
谢谢~
------解决方案--------------------
vector <int> vec(1,number); // vec 中只有1个数 number(2)
int i = 1;
while(i != n)
{
vector <int> ::iterator iter = vec.begin();
for(;iter != vec.end(); ++iter)
{ {
if((iter++) != vec.end()) // iter++: iter的原值返回与vec.end()比较, !=成立
{
if(((*iter) * number) < 10) // 因为上面的iter++, iter已经到达vec.end()
// 此时iter已经无效了, 所以*iter操作非法!
------解决方案--------------------
恭喜楼主,那就散个分做善事吧。
------解决方案--------------------
恭喜+接分 嘿嘿
程序这样的:求2的n次方~
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void f(int n)
{
if(n)
{
const int number = 2;
vector <int> vec(1,number);
/* 我在f函数设置了个断点,用F11单步调试,不明白为什么在这个地方出现了异常,但是翻了C++的书,这样初始化没有错啊,是调试的方法错误了,还是这里本身有问题?请各位高人指点啊~ */
int i = 1;
while(i != n)
{
vector <int> ::iterator iter = vec.begin();
for(;iter != vec.end(); ++iter)
{
if((iter++) != vec.end())
{
if(((*iter) * number) < 10)
(*iter) *= number;
else
{
(*iter) %= 10;
(*iter)++;
}
}
else
{
if(((*iter) * 2) < 10)
(*iter) *= 2;
else
{
(*iter) %= 10;
vec.push_back(1);
break;
}
}
}
i++;
}
vector <int> ::iterator j = vec.end() - 1;
while(j != vec.begin())
{
cout < < (*j);
j--;
}
j = vec.begin();
cout < < (*j);
return;
}
cout < < "1\n ";
return;
}
int main()
{
int n;
cout < < "Input the number: ";
cin > > n;
cout < < "The rusult is: ";
f(n);
system( "PAUSE ");
return 0;
}
我是在VS2005下调试的,各位要是有编译器的话,就帮忙调试看看了,
看看异常是在哪出现的
谢谢~
------解决方案--------------------
vector <int> vec(1,number); // vec 中只有1个数 number(2)
int i = 1;
while(i != n)
{
vector <int> ::iterator iter = vec.begin();
for(;iter != vec.end(); ++iter)
{ {
if((iter++) != vec.end()) // iter++: iter的原值返回与vec.end()比较, !=成立
{
if(((*iter) * number) < 10) // 因为上面的iter++, iter已经到达vec.end()
// 此时iter已经无效了, 所以*iter操作非法!
------解决方案--------------------
恭喜楼主,那就散个分做善事吧。
------解决方案--------------------
恭喜+接分 嘿嘿