我们可以通过考虑以下问题来确定某项计划是否运作良好吗?
编写并运行一些代码以确定是否有任何溢出?
我们的助手在通过其他程序运行我们的程序后给我们反馈。
在反馈中,它显示是否存在溢出,我们是否以错误的方式使用free / delete,以及其他一些事情。
我想知道她是怎么发现的?
答案 0 :(得分:3)
可以通过多种方式推断出上述情况。
使用valgrind这样的工具:这个 有助于检测内存泄漏等
将要创建的模拟器 两个程序的输入 正面和负面的测试用例。
干杯!
答案 1 :(得分:3)
你说那个人有源代码 - 这意味着他可以通过阅读和思考或使用一些聪明的程序来分析程序。
例如,他可以看到以下内容:
void someCleverFunction()
{
char* buffer = new char[100];
if( someCondition ) {
//do something with the buffer
delete[] buffer;
return;
}
Sleep( 1000 );
}
然后很明显,一旦someCondition
未得到满足delete[]
,就不会调用{{1}},这确实是内存泄漏。
这就是所谓的静态代码分析。
答案 2 :(得分:1)
我会将“运作良好”定义为该计划的效果:它是否按照要求执行,是否在所有情况下都这样做?这应该处理1)清楚地描述程序应该做什么和2)尽可能彻底地测试所有情况。
然而,缓冲区溢出,内存泄漏和堆栈溢出是“表现良好”的一部分,这也意味着程序的健壮性:应该没有程序的情况崩溃:这里也需要彻底的测试,但是也应该使用代码审查和工具作为静态分析(例如覆盖率)和动态分析(例如valgrind),因为内存泄漏的问题可能会被忽视,直到你实际内存不足的时候。使用哪些工具取决于您的平台和程序规模。
答案 3 :(得分:0)
您使用的是Visual C ++吗? 如果是这样,请阅读:http://msdn.microsoft.com/en-us/library/5at7yxcs(VS.71).aspx
在linux上使用gcc使用Valgrind。它有一个非常好的文档。