为什么我会遇到访问冲突运行时错误?

时间:2012-01-23 11:36:25

标签: c visual-c++ struct access-violation

我有这个结构

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。

它出了什么问题?

2 个答案:

答案 0 :(得分:1)

最可能的原因是he.fp.fing_print尚未初始化,因此在尝试访问其元素时,您的进程会崩溃。要验证,请打印出指针的值,或在调试器中检查它。

修改 fscanf()代码有两个问题:

  1. 目的并不完全清楚,但%X&test_st.fp.fing_print 一起覆盖了指针;
  2. 您似乎没有为test_st.fp.fing_print分配内存。

答案 1 :(得分:0)

可能的原因可能是test_st未初始化并且您正在使用它来初始化fp。