почему я получаю сообщение об ошибке нарушения прав доступа? - PullRequest
1 голос
/ 23 января 2012

У меня есть эта структура

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;

и следующая строка кода для извлечения 10 мб из массива fing_print

unsigned int h;
h = (he.fp.fing_print[0] << 2 | (he.fp.fing_print[1] & 0xC0) >> 6) & 0x3FF;

Вот как я инициализировал элемент данных heчтение содержимого из файла

while(fscanf(rd,"%ul,%ul,%X",&test_st.fp.chunk_offset,&test_st.fp.chunk_length,&test_st.fp.fing_print) !=EOF)
{   
    ....
}

vc 2010 выдает ошибку:

Необработанное исключение в 0x013217f8 в htable.exe: 0xC0000005: расположение чтения нарушения доступа 0xcccccccc.

что с ним не так?

Ответы [ 2 ]

1 голос
/ 23 января 2012

Наиболее вероятная причина в том, что he.fp.fing_print не был инициализирован, поэтому ваш процесс падает при попытке доступа к его элементам. Для проверки распечатайте значение указателя или проверьте его в отладчике.

edit С кодом fscanf() есть две проблемы:

  1. Не совсем понятно, что это за цель, но %X вместе с &test_st.fp.fing_print перезаписывает указатель ;
  2. Вы не выделяете память для test_st.fp.fing_print.
0 голосов
/ 23 января 2012

Возможной причиной может быть то, что test_st не инициализирован, и вы используете его для инициализации fp.

...