Intel(R)Inspector XE 2011是一款专门动态测试应用程序的内存访问错误和线程访问错误的工具。查线程访问错误仅用于多线程程序;查内存访问错误即可以用于多线程程序也可以用于单线程程序。
下面是一段简单程序。(为理解Inspector XE的结果方便起见,配上行号)
01 #include <stdio.h>
02
03 typedef enum { true=1, false=0} bool;
04 struct my_struct{
05 int int_a;
06 bool bool_b;
07 bool dummy[3];
08 int int_c;
09 };
10
11 int main()
12 {
13 struct my_struct *theStruct, theStruct1;
14
15 theStruct = (struct my_struct*)malloc(sizeof(struct my_struct));
16 theStruct->int_a = 10;
17 theStruct->int_c = 20;
18 theStruct->bool_b = true;
19
20 memcpy(&theStruct1, theStruct, sizeof(struct my_struct));
21 printf("integer a is %d, integer c is %d, bool is %d\n", theStruct1.int_a, theStruct1.int_c, theStruct1.bool_b);
22
23 free(theStruct);
24 return 0;
25}
编译后,使用Inspector XE的命令行进行测试
# inspxe-cl -collect mi3 -- ./test_uninitial
Used suppression file(s): []
integer a is 10, integer c is 20, bool is 1
2 new problem(s) found
1 Uninitialized memory access problem(s) detected
1 Uninitialized partial memory access problem(s) detected
输出报告,以了解详细信息。
# inspxe-cl -report problems
Used suppression file(s): []
New Problem P1: Error: Uninitialized memory access
/home/peter/problem_report/test_uninitial.c(15): Error X1: P1: Uninitialized memory access: Allocation site: Function main: Module /home/peter/problem_report/test_uninitial
/home/peter/problem_report/test_uninitial.c(20): Error X2: P1: Uninitialized memory access: Read: Function main: Module /home/peter/problem_report/test_uninitial
New Problem P2: Error: Uninitialized partial memory access
/home/peter/problem_report/test_uninitial.c(15): Error X3: P2: Uninitialized partial memory access: Allocation site: Function main: Module /home/peter/problem_report/test_uninitial
/home/peter/problem_report/test_uninitial.c(20): Error X4: P2: Uninitialized partial memory access: Read: Function main: Module /home/peter/problem_report/test_uninitial
根据以上的结果,你能估计出大概的问题吗?如何解决这个问题?能否给出二种以上的方法。