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了,自己就改变了,这是什么原因啊?
我中间也没有对其进行赋值操作啊?
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了,自己就改变了,这是什么原因啊?
我中间也没有对其进行赋值操作啊?
我刚又查了一下,我发现如果我把上面的赋值的地方给屏蔽,之后这样写
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;
}
}
}
就会分别的变得不是1了变成什么了?随机值?
因为觉得之前的赋值操作没什么问题,于是就把赋值的地方保留,
把下面的其它处理都屏蔽,发现也是没问题的
不知道是哪里的问题了下面的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) );
}
}*/
}
看上去也不像是随机值吧,现在是循环到第五次的时候,a就会变成几千的数,
循环到第六次的时候,df也会变化,第七次……
你注释掉的这段代码,好像没有对wk_result访问,那么,就是这段代码可能访问数组越界了!memcpy里面的空间都够么?有没有访问越界?
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)
很可能这里出了问题,注释掉试试
{
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的值...
{
int a = wk_result[i];
}
我这样试了一下,把循环精简到这些
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的地方注释掉,就没事
我在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.....}
因为wk_order = wk_order + wk_result[i]; 注释掉, wk_order访问就不会增大。你看看p_line_segment_result.s_line[wk_order],应该是这个访问越界了!
之前我就是这么检查的,不过是循环第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次的时候就开始有错误了。
我刚跟踪了一下,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) );
调试的时候,自己跟踪一下,看看是不是值不对!
声明的时候
wk_order = 0;之后wk_order有可能改变数值的地方就是在那个循环里的
wk_order = wk_order + wk_result[i];我跟踪过,这个值很正常。