您现在的位置是:首页 > 数码 > 

就是你这个bug浪费我一天时间?

2025-07-27 13:25:06
就是你这个bug浪费我一天时间? 最近在研究一个算法,为了验证其效率就随手编写了一个代码。本以为没什么问题,结果一运行程序就卡住导致运行出错。 额。。。写个程序有Bug很正常的事情嘛,然而,就是这个Bug花了我一天的时间错误。更令我沮丧的是,错误的源头竟然是。。。(买个关子,有兴趣的读者可以看看下

就是你这个bug浪费我一天时间?

最近在研究一个算法,为了验证其效率就随手编写了一个代码。本以为没什么问题,结果一运行程序就卡住导致运行出错。
额。。。写个程序有Bug很正常的事情嘛,然而,就是这个Bug花了我一天的时间错误。更令我沮丧的是,错误的源头竟然是。。。(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后)


我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈

// 一个点的数据结构
class Point{...
}
queue<Point*> Q; // 一个用于保存点的队列
DS ds; // 一个用于组织点集的数据结构 
// 检查该点的值是否满足要求
bool ValueCheck(Point *p){...
}
// 检查该点是否满足插入ds的要求
bool InsertCheck(Point *p){...
}
// 将一个点插入到ds中
bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false;
}
void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}...
}

如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行。


错误分析:
其实,很显然这是一个关于内存不正当使用的一个问题。错误的原因就在Insert ( p )这句话这,如果一个点满足插入条件并插入ds中,但却不满足值检查(ValueCheck)条件,就会导致else语句块执行,也就是删除该点所在的内存空间,从而在最后查点的时候发现有异常的点。
一个很简单的办法是修改if(Insert( p ) && ValueCheck( p ))为if(ValueCheck( p ) && Insert( p )),即利用&&的短路机制,只有在满足值检查后,再进行插入检查和插入操作。
这篇文章主要是想提醒新人们,在new和delete时一定要仔细检查啊,千万不要和作者一样犯这么低级的错误。。。。。(= m =)

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/805823.html

相关标签:无
上传时间: 2024-01-18 06:26:03
留言与评论(共有 18 条评论)
本站网友 removeattribute
18分钟前 发表
本站网友 云南大学滇池学院
11分钟前 发表
就是你这个bug浪费我一天时间? 最近在研究一个算法,为了验证其效率就随手编写了一个代码
本站网友 应用宝典
7分钟前 发表
本站网友 特斯拉多少钱一辆
5分钟前 发表
(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后) 我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈 ) // 一个点的数据结构 class Point{... } queue<Point*> Q; // 一个用于保存点的队列 DS ds; // 一个用于组织点集的数据结构 // 检查该点的值是否满足要求 bool ValueCheck(Point *p){... } // 检查该点是否满足插入ds的要求 bool InsertCheck(Point *p){... } // 将一个点插入到ds中 bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false; } void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}... } 如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行
本站网友 两国集团
18分钟前 发表
本站网友 田鸡是什么
13分钟前 发表
更令我沮丧的是,错误的源头竟然是
本站网友 什么是政府性基金
2分钟前 发表
本站网友 算卦签
9分钟前 发表
(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后) 我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈 ) // 一个点的数据结构 class Point{... } queue<Point*> Q; // 一个用于保存点的队列 DS ds; // 一个用于组织点集的数据结构 // 检查该点的值是否满足要求 bool ValueCheck(Point *p){... } // 检查该点是否满足插入ds的要求 bool InsertCheck(Point *p){... } // 将一个点插入到ds中 bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false; } void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}... } 如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行
本站网友 黄芪口服液
18分钟前 发表
更令我沮丧的是,错误的源头竟然是
本站网友 寻路电视剧全集优酷
14分钟前 发表
(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后) 我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈 ) // 一个点的数据结构 class Point{... } queue<Point*> Q; // 一个用于保存点的队列 DS ds; // 一个用于组织点集的数据结构 // 检查该点的值是否满足要求 bool ValueCheck(Point *p){... } // 检查该点是否满足插入ds的要求 bool InsertCheck(Point *p){... } // 将一个点插入到ds中 bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false; } void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}... } 如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行
本站网友 崂山租房
17分钟前 发表
更令我沮丧的是,错误的源头竟然是
本站网友 荣臣海泉达
13分钟前 发表
就是你这个bug浪费我一天时间? 最近在研究一个算法,为了验证其效率就随手编写了一个代码
本站网友 缺钱影响智商
4分钟前 发表
本站网友 四川男科
30分钟前 发表
本站网友 青浦outlets
6分钟前 发表
(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后) 我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈 ) // 一个点的数据结构 class Point{... } queue<Point*> Q; // 一个用于保存点的队列 DS ds; // 一个用于组织点集的数据结构 // 检查该点的值是否满足要求 bool ValueCheck(Point *p){... } // 检查该点是否满足插入ds的要求 bool InsertCheck(Point *p){... } // 将一个点插入到ds中 bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false; } void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}... } 如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行
本站网友 option82
26分钟前 发表
(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后) 我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈 ) // 一个点的数据结构 class Point{... } queue<Point*> Q; // 一个用于保存点的队列 DS ds; // 一个用于组织点集的数据结构 // 检查该点的值是否满足要求 bool ValueCheck(Point *p){... } // 检查该点是否满足插入ds的要求 bool InsertCheck(Point *p){... } // 将一个点插入到ds中 bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false; } void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}... } 如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行
本站网友 张家港租房网
20分钟前 发表
(买个关子,有兴趣的读者可以看看下面的伪代码错误,错误分析见最后) 我将C代码主要部分列出,读者可以猜猜(错误新人也可能到哦,主要是我太蠢了,哈哈 ) // 一个点的数据结构 class Point{... } queue<Point*> Q; // 一个用于保存点的队列 DS ds; // 一个用于组织点集的数据结构 // 检查该点的值是否满足要求 bool ValueCheck(Point *p){... } // 检查该点是否满足插入ds的要求 bool InsertCheck(Point *p){... } // 将一个点插入到ds中 bool Insert(Point *p){if(InsertCheck(p)){ //满足ds.insert(p);return true;}else return false; } void main(){...//假设Q中已经存放了许多点的地址,且每个地址都指向一个具体的Pointwhile(!()){Point *p = Q.pop();if(Insert(p) && ValueCheck(p)){...}else{delete p;}}... } 如果运行程序,一个非常有意思的现象是ds中的一些点不是原先Q中保存的点,同时在我编写的代码中,经常会导致代码运行错误,但有时候却可以正常运行