一个&&操作引发的段错误
时间:2010-09-23 来源:tq08g2z
本意是要实现一个3趟的希尔排序,最初的代码如下:
for(i = 4; i > 0; i /= 2)
for(j = 0; j < i; j ++){
for(k = j + i; k < (readsize / sizeof(unsigned int)); k += i){
insertdata = fildata[k];
m = k - i;
while((insertdata < fildata[m]) && (m >= 0)){
fildata[m+i] = fildata[m];
m -= i;
}
fildata[m+i] = insertdata;
}
结果,一运行就报错:段错误
最终发现,是&&操作左右两个表达式相对位置引起的,将两个表达式位置交换下,则一切OK。
因为,按照上面的代码的写法,在将一个值插入到位置0时,将会去访问根本不存在的内存。
for(i = 4; i > 0; i /= 2)
for(j = 0; j < i; j ++){
for(k = j + i; k < (readsize / sizeof(unsigned int)); k += i){
insertdata = fildata[k];
m = k - i;
while((insertdata < fildata[m]) && (m >= 0)){
fildata[m+i] = fildata[m];
m -= i;
}
fildata[m+i] = insertdata;
}
结果,一运行就报错:段错误
最终发现,是&&操作左右两个表达式相对位置引起的,将两个表达式位置交换下,则一切OK。
因为,按照上面的代码的写法,在将一个值插入到位置0时,将会去访问根本不存在的内存。
相关阅读 更多 +