--- tree.cpp 2010-08-06 15:50:05.883899976 -0700 +++ tree.cpp 2010-08-06 15:50:55.623914910 -0700 @@ -228,15 +228,19 @@ if( _sample_idx ) { CV_CALL( sample_indices = cvPreprocessIndexArray( _sample_idx, sample_all )); - sidx = sample_indices->data.i; - sample_count = sample_indices->rows + sample_indices->cols - 1; + if ( sample_indices ) { + sidx = sample_indices->data.i; + sample_count = sample_indices->rows + sample_indices->cols - 1; + } } if( _var_idx ) { CV_CALL( var_idx = cvPreprocessIndexArray( _var_idx, var_all )); - vidx = var_idx->data.i; - var_count = var_idx->rows + var_idx->cols - 1; + if ( var_idx ) { + vidx = var_idx->data.i; + var_count = var_idx->rows + var_idx->cols - 1; + } } is_buf_16u = false; @@ -863,20 +867,22 @@ if( _subsample_idx ) { CV_CALL( subsample_idx = cvPreprocessIndexArray( _subsample_idx, sample_count )); - sidx = subsample_idx->data.i; - CV_CALL( subsample_co = cvCreateMat( 1, sample_count*2, CV_32SC1 )); - co = subsample_co->data.i; - cvZero( subsample_co ); - count = subsample_idx->cols + subsample_idx->rows - 1; - for( i = 0; i < count; i++ ) - co[sidx[i]*2]++; - for( i = 0; i < total; i++ ) - { - int count_i = co[i*2]; - if( count_i ) + if ( subsample_idx ) { + sidx = subsample_idx->data.i; + CV_CALL( subsample_co = cvCreateMat( 1, sample_count*2, CV_32SC1 )); + co = subsample_co->data.i; + cvZero( subsample_co ); + count = subsample_idx->cols + subsample_idx->rows - 1; + for( i = 0; i < count; i++ ) + co[sidx[i]*2]++; + for( i = 0; i < total; i++ ) { - co[i*2+1] = cur_ofs*var_count; - cur_ofs += count_i; + int count_i = co[i*2]; + if( count_i ) + { + co[i*2+1] = cur_ofs*var_count; + cur_ofs += count_i; + } } } }