Попытка чтения файлов AIFF неожиданная ошибка из-за расположения указателя и т. Д. - PullRequest
0 голосов
/ 18 марта 2019

Я пытался прочитать файл AIFF по нескольким переменным, и я столкнулся с проблемой при попытке прочитать часть данных блока данных. Я получаю сообщение об ошибке: Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7ffeee1bbce8). Я знаю, что обычно это означает, что есть проблема с указателем, однако я проверил и запустил так много тестов, и указатель не попадает в конец файла, так что это не так. Пожалуйста, кто-нибудь может посмотреть, я пытался сделать очень упрощенную версию, чтобы показать проблему, с которой я столкнулся.

int main()
{
    FILE * AIFF;
    int32_t Datasize = 27539504;
    int16_t Data[(Datasize - 8)/2];

    AIFF = fopen("/Volumes/Audio CD/Audio Track.aiff", "r");

    fread(Data, 2, (Datasize - 8)/2, AIFF);

    return 0;
}

Ошибка появляется на линии fopen. Также это в C ++ в Xcode на 64-битном Mac.

Спасибо.

1 Ответ

0 голосов
/ 18 марта 2019

Ваш код, кажется, не проверяет, возвращает ли fopen() значение NULL ... поэтому, если fopen() не получается по какой-либо причине (скорее всего, потому что указанный файл не существует или не может быть открыт для чтения), то ваша программа завершится сбоем, когда fread() попытается разыменовать указатель NULL.

Примечание: поскольку файлы .AIFF представляют собой двоичные файлы, а не ASCII, вы должны передать "rb" в качестве второго аргументаfopen() вместо "r".

...