Что такое сигналы в отладке сетевых компонентов C ++ - PullRequest
1 голос
/ 03 сентября 2011

Привет, ребята, я пытаюсь отладить это приложение в C ++, используя NetBeans (при запуске он выдает ошибку при запуске после закрытия), в этот момент выдает ошибку сигнала

* c = (char) anyчисло;

где любое число является целым числом от 1-7

, которое говорит мне, что сигнал пойман SIGSEGV?с ошибкой сигнала?

что это такое

код записывает некоторые вещи в двоичный файл, он выглядит так

void clean_up(Dot &myDot, Uint32 &bg) {
    SDL_FreeSurface(DotS);

    ofstream f(SAVE_FILE_PATH, ios::binary | ios::out);

    f.clear();

//    char *buffer;

//    buffer[0] = *(char*)(&myDot.get_location().x + 0);
//    buffer[1] = *(char*)(&myDot.get_location().x + 1);
//    buffer[2] = *(char*)(&myDot.get_location().x + 2);
//    buffer[3] = *(char*)(&myDot.get_location().x + 3);
//    buffer[4] = *(char*)(&myDot.get_location().y + 0);
//    buffer[5] = *(char*)(&myDot.get_location().y + 1);
//    buffer[6] = *(char*)(&myDot.get_location().y + 2);
//    buffer[7] = *(char*)(&myDot.get_location().y + 3);

    f.write((char*)&myDot.get_location().x, sizeof(myDot.get_location().x));

    f.write((char*)&myDot.get_location().y, sizeof(myDot.get_location().y));

    char *c;

    if (bg == C0)
        *c = (char)1;
    else if (bg == C1)
        *c = (char)2;
    else if (bg == C2)
        *c = (char)3;
    else if (bg == C3)
        *c = (char)4;
    else if (bg == C4)
        *c = (char)5;
    else if (bg == C5)
        *c = (char)6;
    else if (bg == C6)
        *c = (char)7;

    f.write(c, 1);

    f.close();

    SDL_Quit();
}

и, пожалуйста, может кто-нибудь сказать мне, почему прокомментировалчасть тоже дает мне сигнал

1 Ответ

1 голос
/ 03 сентября 2011

Вы не выделили память для c.Это указатель на какое-то случайное место (или NULL, в зависимости от того, как инициализируется память).Затем вы пытаетесь написать в него.

Действительно ли это должен быть указатель?Можете ли вы просто использовать char c;, а затем c = (char)1; и т. Д. Затем вы захотите изменить свой вызов fwrite на f.write(&c, 1); (или использовать fputc).

РЕДАКТИРОВАТЬ: закомментированная часть вашего кодапохоже, у него та же самая основная проблема.Вы не выделили память для буфера.Если в примере больше всего, у вас всего 8 элементов, то объявите его как char buffer[8] вместо указателя.

...