vector<int>    wk_result;接着一个for循环16次左右,但是都是一样的处理
wk_result.push_back( 1 );/*FILE *file = fopen( "c:\\x.txt", "w" );
for( i=0; i<wk_result.size(); i++ )
fprintf( file, "%d\n", wk_result[i] );
fclose( file );*/  测试用,此时的wk_result的值还都是{1,1,1,1,1,1,1,1.....}之后有问题的处理,我把有关wk_result的部分贴出来
for( i=0; i<wk_result.size(); i++ )
{
int a = wk_result[0];
int b = wk_result[1];
int c = wk_result[2];
int d = wk_result[3];
int e = wk_result[4];   //----------x
int f = wk_result[5];
int g = wk_result[6];
int h = wk_result[7];  if( wk_result[i]==1 )
{
……
}wk_order = wk_order + wk_result[i];
}
上面就是有关的程序了,那个--------x的地方是我为了测试写的,
奇怪的是,为什么那个for循环进行几次之后,abcdefgh这几个数字
就会分别的变得不是1了,自己就改变了,这是什么原因啊?
我中间也没有对其进行赋值操作啊?

解决方案 »

  1.   


    我刚又查了一下,我发现如果我把上面的赋值的地方给屏蔽,之后这样写
    wk_result.assign( 16, 1 );
    用这样的方法来赋值,之后下面的操作就没问题,循环多少次都不会改变。但是问题是这次的对象都可以是1,但是以后不一定啊,所以我还得用我
    之前的赋值操作。
    大致的代码贴一下就是
    for( i=0; i<v_old_online.s_line_num; i++ )
    {
    wk_rect1 = v_old_online.s_line[i].s_line_area;
    wk_bool = 0;
    wk_temps_line.clear(); for( j=0; j<v_op_file.s_line_num; j++ )
    {
    wk_rect2 = v_op_file.s_lines[j].s_line_area; if(( wk_rect1.left+p_rect_distance>=wk_rect2.left )
    &&( wk_rect1.top+p_rect_distance>=wk_rect2.top )
    &&( wk_rect1.right-p_rect_distance<=wk_rect2.right )
    &&( wk_rect1.bottom-p_rect_distance<=wk_rect2.bottom ))
    {
    wk_result.push_back( 1 );
    wk_all_num = wk_all_num + wk_result[wk_result.size()-1];
    wk_bool = 1;
    break;
    }
    }
    }
      

  2.   

    abcdefgh这几个数字
    就会分别的变得不是1了变成什么了?随机值?
      

  3.   

    越来越糊涂
    因为觉得之前的赋值操作没什么问题,于是就把赋值的地方保留,
    把下面的其它处理都屏蔽,发现也是没问题的
    不知道是哪里的问题了下面的if处理如果像下面那样注释掉,也是没问题的
    if( wk_result[i]==1 )
    {
    /*p_line_segment_result.s_line[wk_order].s_line_area = v_old_online.s_line[i].s_line_area;
    p_line_segment_result.s_line[wk_order].s_line_direction = v_old_online.s_line[i].s_line_direction;
    p_line_segment_result.s_line[wk_order].s_character_num = v_old_online.s_line[i].s_character_num;
    p_line_segment_result.s_line[wk_order].s_characters 
    = (ONLINE_CHARACTER*)malloc( p_line_segment_result.s_line[wk_order].s_character_num*sizeof(ONLINE_CHARACTER) ); for( j=0; j<p_line_segment_result.s_line[wk_order].s_character_num; j++ )
    {
    p_line_segment_result.s_line[wk_order].s_characters[j].s_character_area
    = v_old_online.s_line[i].s_characters[j].s_character_area;
    p_line_segment_result.s_line[wk_order].s_characters[j].s_stroke_num
    = v_old_online.s_line[i].s_characters[j].s_stroke_num;
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes
    = (ONLINE_STROKE*)malloc( p_line_segment_result.s_line[wk_order].s_characters[j].s_stroke_num*sizeof(ONLINE_STROKE) ); for( k=0; k<p_line_segment_result.s_line[wk_order].s_characters[j].s_stroke_num; k++ )
    {
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_area 
    = v_old_online.s_line[i].s_characters[j].s_strokes[k].s_area;
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_pen_down 
    = v_old_online.s_line[i].s_characters[j].s_strokes[k].s_pen_down;
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_pen_up 
    = v_old_online.s_line[i].s_characters[j].s_strokes[k].s_pen_up;
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_point_num
    = v_old_online.s_line[i].s_characters[j].s_strokes[k].s_point_num;
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_points
    = (POINT*)malloc( p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_point_num*sizeof(POINT) );
    memcpy( p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_points,
    v_old_online.s_line[i].s_characters[j].s_strokes[k].s_points,
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_point_num*sizeof(POINT) );
    }
    }*/
    }
      

  4.   


    看上去也不像是随机值吧,现在是循环到第五次的时候,a就会变成几千的数,
    循环到第六次的时候,df也会变化,第七次……
      

  5.   

    你确信没有数组越界访问?
    你注释掉的这段代码,好像没有对wk_result访问,那么,就是这段代码可能访问数组越界了!memcpy里面的空间都够么?有没有访问越界?
      

  6.   

    memcpy( p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_points,
    v_old_online.s_line[i].s_characters[j].s_strokes[k].s_points,
    p_line_segment_result.s_line[wk_order].s_characters[j].s_strokes[k].s_point_num*sizeof(POINT)
    很可能这里出了问题,注释掉试试
      

  7.   

    for( i=0; i<wk_result.size(); i++ )
    {
    int a = wk_result[0];
    int b = wk_result[1];
    int c = wk_result[2];
    int d = wk_result[3];
    int e = wk_result[4]; //----------x
    int f = wk_result[5];
    int g = wk_result[6];
    int h = wk_result[7];   
    .........
    }
    在这个for循环开始的时候,你检查下wk_result的值...
      

  8.   

    for( i=0; i<wk_result.size(); i++ )
    {
    int a = wk_result[i];
    }
      

  9.   


    我这样试了一下,把循环精简到这些
    for( i=0; i<wk_result.size(); i++ )
    {
        int a = wk_result[0];
        int b = wk_result[1];
        int c = wk_result[2];
        int d = wk_result[3];
        int e = wk_result[4];
        int f = wk_result[5];
        int g = wk_result[6];
        int h = wk_result[7];
    if( wk_result[i]==1 )
    {
    p_line_segment_result.s_line[wk_order].s_line_area = v_old_online.s_line[i].s_line_area;
    p_line_segment_result.s_line[wk_order].s_line_direction = v_old_online.s_line[i].s_line_direction;
    p_line_segment_result.s_line[wk_order].s_character_num = v_old_online.s_line[i].s_character_num;
    p_line_segment_result.s_line[wk_order].s_characters 
    = (ONLINE_CHARACTER*)malloc( p_line_segment_result.s_line[wk_order].s_character_num*sizeof(ONLINE_CHARACTER) );

    } wk_order = wk_order + wk_result[i];  //-------------------ssssss
    }
    还是有问题,但是如果我把-------------sssss的地方注释掉,就没事
      

  10.   


    我在for循环开始之前,检查过
    /*FILE *file = fopen( "c:\\x.txt", "w" );
    for( i=0; i<wk_result.size(); i++ )
    fprintf( file, "%d\n", wk_result[i] );
    fclose( file );*/ 测试用,此时的wk_result的值还都是{1,1,1,1,1,1,1,1.....}
      

  11.   

    p_line_segment_result.s_line[wk_order].s_character_num 应该是这个访问越界了!
    因为wk_order = wk_order + wk_result[i]; 注释掉, wk_order访问就不会增大。你看看p_line_segment_result.s_line[wk_order],应该是这个访问越界了!
      

  12.   


    之前我就是这么检查的,不过是循环第8次才发现 a的值有问题,后来我就
    int a = wk_result[0];
    int b = wk_result[1];
    int c = wk_result[2];
    int d = wk_result[3];
    int e = wk_result[4]; //----------x
    int f = wk_result[5];
    这样摊开来写,发现其实循环第5次的时候就开始有错误了。
      

  13.   


    我刚跟踪了一下,wk_order其实是每次加1的,很正常,而这个p_line_segment_result.s_line,我在for循环开始之前给申请的空间,
    p_line_segment_result.s_line_num = wk_all_num;    ------------16,所以应该没有出界
    p_line_segment_result.s_line = (ONLINE_LINE*)malloc( p_line_segment_result.s_line_num*sizeof(ONLINE_LINE) );
      

  14.   

    wk_order 的值,你跟踪一下,怀疑你就初始化一次!后面每次使用,没有初始化!
    调试的时候,自己跟踪一下,看看是不是值不对!
      

  15.   


    声明的时候
    wk_order = 0;之后wk_order有可能改变数值的地方就是在那个循环里的
    wk_order = wk_order + wk_result[i];我跟踪过,这个值很正常。
      

  16.   

    你在循环前,加上wk_order = 0,然后再试试
      

  17.   

    楼主问题解决了么, 我也遇到了这种问题,就是在while 的第3次循环后,int i在循环体外声明的由5突然变成10000多,为啥呢?
      

  18.   

    我QQ132507 2483 ,我对csdn有意见啊,没有联系方式的公开啊,我想找个人还要等论坛回复,谁有脑子天天想这个事,没有即时通讯的公开,我当前的问题无法即时沟通,早就失效了。csdn这么多年这个功能都不完备,难怪被百度知道打的屁滚尿流,