Попытка инициализировать объекты класса внутри структуры приводит к ошибкам сегментации.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Попытка инициализировать объекты класса внутри структуры приводит к ошибкам сегментации.

Сообщение Anonymous »

Я пытаюсь создать программу на C++, которая печатает текст на терминале разными цветами.
У меня есть следующий код, в котором используется класс Color, используемый внутри Letter_template< /code> структура, представляющая собой элементы массива размером 100:

Код: Выделить всё

#include 
#include 
#include 

// Works on little endian processors which mine happens to be
#define COLOR_PREPEND 0x001b;

class Color
{
private:
char contents[6];
public:
Color() {
short prepend = COLOR_PREPEND;
sprintf(contents, "%s[%dm", (char *)prepend, 0);
}
Color(int code) {
short prepend = COLOR_PREPEND;
sprintf(contents, "%s[%dm", (char *)prepend, code);
}
};

typedef struct {
Color *set;
char c;
Color *reset;
} letter_template;

letter_template essay[100];

int main() {
// Initialize array
for (int i = 0; i < sizeof(essay)/sizeof(essay[0]); i++) {
essay[i].set = new Color(); essay[i].reset = new Color();
}

return 0;
}
Ошибка сегмента происходит на первой итерации цикла for. Используя отладчик, я заметил, что содержимое каждого члена эссе имело нулевые значения (0x0) как для атрибутов set, так и для атрибутов сброса, поэтому я думаю, что он не смог инициализировать Color. объекты. Однако я не могу понять, почему.
Сначала я действительно пытался получить одну длинную непрерывную строку данных в порядке последовательность цветов > буква > последовательность цветов > повторить. Я знаю, что то, что я закодировал, не будет именно этим, однако я не понимаю, по крайней мере, почему это не должно работать.
Я в тупике, потому что мой Цвет определение класса, как вы видите, работало нормально до того, как я поместил его в структуру class и typedef (например, оператор sprintf, как вы видите, работал нормально, когда я только что написал его в основной ). Мой атрибут содержимого имеет 6 байт, и я знаю, что этого достаточно для того, что я там загружаю.

< strong>РЕДАКТИРОВАТЬ:
Я обновил код именно так, как у меня есть, включая недостающие определения и включения. Моя команда компиляции была:

Код: Выделить всё

g++ -c main.cpp -o main.o; g++ main.o -o main.exe
Та же проблема, что и раньше.
Примечание. Изначально это был код C, поэтому он выглядит как код C. Причина, по которой я использую объекты и вещи C++, заключается в том, что мне нужна была утилита, позволяющая устанавливать и сбрасывать определенные цвета для определенных букв без взлома везде жестко закодированных строк, для чего я хотел использовать классы и методы.

Подробнее здесь: https://stackoverflow.com/questions/786 ... tion-fault
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»