@rg070836rg
2015-09-10T16:04:53.000000Z
字数 979
阅读 2700
软件分析与测试
能够满足PIE三个条件。
程序很简单,要求输入一个数字,得到屏幕显示“no error”
程序错误点在数组越界,内存占用,导致程序析构时候失败。
当输入在0~50 跳过不执行错误代码。
当输入在51~200,这边定义char数组,越界但是不导致奔溃
当输入在201~400 定义int数组,越界,析构时候奔溃。
其他时候,直接输出no error
代码样例如下:
#include <iostream>
using namespace std;
#define N 10
void test1()
{
char a[N];
for (char i=0;i<N+1 ;i++)
{
a[i]=97;
}
cout<<"no error!"<<endl;
}
void test2()
{
int a[N];
for (int i=0;i<N+1 ;i++)
{
a[i]=97;
}
cout<<"no error!"<<endl;
}
void test0(int flag)
{
if (flag<50 && flag >0)
{
int a[N];
for (int i=0;i<N+1 ;i++)
{
a[i]=97;
}
}
cout<<"no error!"<<endl;
}
void main()
{
int flag;
cin>>flag;
if (flag>=0&&flag<=50)
{
test0(100);//选择性执行
}
else if(flag>=51 && flag<=200)
{
test1();//有错,执行,不崩溃。//第二种
}
else if(flag>=201 && flag<=400)
{
test2();//有错,执行,崩溃。//第三种
}
else
cout<<"no error"<<endl;
}