注册 登录
编程论坛 C++教室

帮忙看看这个简单的程序错在哪里

no47wk 发布于 2010-12-02 18:49, 380 次点击
#include<iostream>
using namespace std;
void *CR(int *a,int *b)
{   
     *b=*a;
     *(b+1)=*a+*(a+1);
     *(b+2)=*(a+1);
     for(*b=*a,*(b+1)=*a+*(a+1),*(b+2)=*(a+1);*(a+2)!=2;++a,++b)//这里的++b如果去除了那么程序就能完成,但是无法达成目的;
        *(b+3)=*(a+2);
        *(b+3)='\0';
}
int main()
{
   int m,a[9][258]={{1,1},{1,2,1},{1,3,2,3,1},{1,4,3,2,3,4,1}},i;
   for(i=3;i<=7;++i)
       CR(&a[i][0],&a[i+1][0]);
   while(cin>>m)
   {
      if(m==1)
          cout<<"11"<<endl;
      else if(m==2)
          cout<<"121"<<endl;
      else
      {
           for(i=0;a[m-1][i]!=0;++i)
               cout<<" "<<a[m-1][i];
           for(i=i-2;a[m-1][i]!=1;--i)
               cout<<" "<<a[m-1][i];
               cout<<" "<<"1"<<endl;
      }
   }
   system("pause");
   return 0;
}

我的环境是DEV-C++4.9.9.2,此程序运行老是直接报错退出····高手指教一下,小弟不胜感激
3 回复
#2
ml2325282010-12-02 22:06
下标越界
判断有问题 *(a+2)!=2

int m,a[9][258]={{1,1},{1,2,1},{1,3,2,3,1},{1,4,3,2,3,4,1}},i;

应该是第一次自行玩CR了后 下个数组中 没有2

[ 本帖最后由 ml232528 于 2010-12-2 22:15 编辑 ]
#3
no47wk2010-12-03 10:01
回复 2楼 ml232528
貌似不是这个问题,如果是下表越界,为什么把++b去除了就没事了呢??
#4
wenxinwukui2010-12-03 11:14
同意2楼,第一次CR后a[4]为{1,5,4,3,0...}里面没有2.
至于为什么去掉++b就没事了,说实话你这个程序在我的codeblocks根本不报错,但是没有输出,呵呵。
1