我有这个结构
typedef struct fpinfo
{
unsigned long chunk_offset;
unsigned long chunk_length;
unsigned char *fing_print;
}fpinfo;
typedef struct Hash_Entry {
struct Hash_Entry *next; /* Link entries within same bucket. */
unsigned namehash; /* hash value of key */
struct fpinfo fp;
} Hash_Entry;
以及从fing_print数组中提取10 msb的以下代码行
unsigned int h;
h = (he.fp.fing_print[0] << 2 | (he.fp.fing_print[1] & 0xC0) >> 6) & 0x3FF;
以下是我通过从文件
中读取内容来初始化数据成员的方法while(fscanf(rd,"%ul,%ul,%X",&test_st.fp.chunk_offset,&test_st.fp.chunk_length,&test_st.fp.fing_print) !=EOF)
{
....
}
vc 2010给出错误:
htable.exe中0x013217f8处的未处理异常:0xC0000005:访问冲突读取位置0xcccccccc。
它出了什么问题?
答案 0 :(得分:1)
最可能的原因是he.fp.fing_print
尚未初始化,因此在尝试访问其元素时,您的进程会崩溃。要验证,请打印出指针的值,或在调试器中检查它。
修改 fscanf()
代码有两个问题:
%X
和&test_st.fp.fing_print
一起覆盖了指针; test_st.fp.fing_print
分配内存。答案 1 :(得分:0)
可能的原因可能是test_st未初始化并且您正在使用它来初始化fp。