Ошибка переноса кода C с 32 на 64 бит: фред вызывает нарушение прав доступа - PullRequest
1 голос
/ 15 апреля 2020

Я портирую свой код C с 32 на 64 бита в visual studio и у меня возникают проблемы с вызовом fread, который вызывает исключение Access violation writing location 0xFFFFFFFF873B2830. Адрес, на который он пишет, совпадает с адресом указателя, возвращаемым malloc.

. Я не могу понять, что может быть причиной этого. Какие-либо предложения?

velo_error_t velo_read_binary_file(char input_file[], uint8_t **p_buffer, uint32_t *p_length) {
    // Returns error code, zero if normal:
    velo_error_t err_code = VELO_ERROR_NONE;
    // read input file.
    FILE *f = fopen(input_file, "rb");
    if (!f) {
        printf("File not valid.  File trying to open for reading:\n%s\n", input_file);
        err_code = VELO_ERROR_INVALID_FILE;
    } else {
        fseek(f, 0, SEEK_END);
        *p_length = ftell(f);
        fseek(f, 0, SEEK_SET);
        *p_buffer = malloc(*p_length);
        if (*p_buffer) {
            fread(*p_buffer, 1, *p_length, f);
        }
        fclose(f);
    }
    return err_code;
}

1 Ответ

0 голосов
/ 15 апреля 2020

Проблема была в отсутствии include (stdlib.h). Visual Studio в 32-битном режиме, кажется, имеет дело с отсутствующими включениями без вывода сообщений и каким-то образом находит нужную библиотеку для использования. В 64-битном режиме это не работает, но не выдает ошибку об отсутствующей ссылке. Он просто возвращает (казалось бы) адрес случайного указателя.

Как утверждает @Jabberwocky, важно обратить внимание на предупреждения в visual studio!

...