#include <iostream>
#include <cstdlib>
#include <cstring>
void test1()
{
new char[123];
}
void test2()
{
char *p = new char[123];
delete p;
}
void test3()
{
char *p = new char;
delete [] p;
}
void test4()
{
char *p = (char *)malloc(123);
delete p;
}
void test5()
{
char *p = new char;
free(p);
}
void test6()
{
char *p = new char[5];
std::strcpy(p, "ksdfd");
delete [] p;
}
void test7()
{
char a[10];
std::cout << a << std::endl;
}
void test8()
{
char x = 65;
std::cout << x << std::endl;
}
int main(int argc, char **argv)
{
unsigned test = 1;
if (argc > 1)
test = std::atoi(argv[1]);
void (*tests[])() = {test1, // leak
test2, // new[]/delete
test3, // new/delete[]
test4, // malloc/delete
test5, // new/free
test6, // buffer overflow
test7, // uninitialized read
test8, // uninitialized read
};
unsigned size = sizeof(tests) / sizeof(*tests);
if (test > size)
test = 1;
if (test == 0)
{
for (unsigned i = 0; i < size; i++)
tests[i]();
}
else
tests[test - 1]();
return 0;
}