Ошибка Xcode: «EXC_BAD_ACCESS» - PullRequest
       0

Ошибка Xcode: «EXC_BAD_ACCESS»

1 голос
/ 03 февраля 2012

Я пытаюсь скомпилировать и запустить тестовую программу на Си в XCode.Эта программа читает 5 символов из текстового файла и закрывает его.Программа компилируется успешно, но при попытке запустить программу выдает ошибку: GDB: Программа получила сигнал: "EXC_BAD_ACCESS" около fclose (in).

#include <iostream>
#include <unistd.h>

int main (int argc, const char * argv[])
{
    bool b;
    char inpath[PATH_MAX];
    printf("Enter input file path :\r\n");
    std::cin >> inpath;
    FILE *in = fopen(inpath, "r+w");
    char buf[5];
    fread(&buf,sizeof(buf),5,in);
    printf(buf);
    fclose(in);
    return 0;
}

Что может быть причиной этого?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

Ах! sizeof(buf) вернет 5, поэтому вы запрашиваете 25 байтов в 5-байтовом буфере. Это перезаписывает авто хранилище и клоберы in.

И, конечно, обратите внимание, что fprint(buf) будет пытаться напечатать буфер без завершающего нуля, поэтому он будет печатать мусор после окончания прочитанного.

2 голосов
/ 03 февраля 2012
fread(&buf,sizeof(buf),5,in);

это говорит о том, что вы хотите прочитать buf 5 раз, что не правильно.

Второй и третий параметры сообщают fread размер каждого элемента, который вы хотите прочитать, и количество элементов.

2 голосов
/ 03 февраля 2012

Линия

fread(&buf,sizeof(buf),5,in);

неправильно: внимательно прочитайте справочную страницу fread (и помните, что sizeof(buf) будет размером всего массива buf).

Линия

 printf(buf);

неправильно. Поведение не определено, если, например, buf будет содержать %d

Вам определенно следует научиться использовать отладчик (и включить все предупреждения с помощью вашего компилятора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...