正在开发的一个应用程序中出现了Heap corruption报错,并且固定出现在释放一个结构指针的某一行。
该结构定义如下:
typedef struct
{
char *file_name;
char *attribute_summary;
int comment_start_lineno;
int attribute_existed;
} attributes_in_comment_t;
在debug时通过建数据断点没有查到破环这个结构数据的代码。几经试验后在上面结构中加了一个分量如下:
typedef struct
{
char *file_name;
char *attribute_summary;
int comment_start_lineno;
int attribute_existed;
char probe[4]; //用于探查corruption
} attributes_in_comment_t;
然后在debug时对probe分量设数据断点,终于发现了对probe进行写操作的代码。原来是有一处代码把attributes_in_comment_t结构的指针当作其他类型的指针使用,所以出现了Heap corruption报错。
以上只是一个例子,不是排查Heap corruption的通用方法。