Я создаю программу GTK, которая выполняет следующие действия: пользователь нажимает кнопку, получает информацию с сервера, а затем создает новые кнопки, по которым пользователь может щелкнуть.Технически у меня есть сигнал в main, и в этом call_back у меня есть несколько сигналов (для каждой из созданных кнопок).
Я хотел бы передать данные этой новой кнопке, но здесь она становится неприглядной.Если я создам структуру внутри моей первой кнопки, то позже произойдет сбой в кнопках, которые сгенерированы, потому что структура локально определена в стеке, и поэтому она удаляется.
Я не могу создать глобальную переменную, поскольку каждая изсозданная кнопка нуждается в разных значениях.В основном я хотел бы передать структуру с несколькими полями, когда вызывается моя начальная кнопка (метод обратного вызова), но каждая из этих структур отличается.
Единственный способ, которым я могу думать, - это разместить его в куче., но становится немного непросто узнать, когда его освободить.
Есть ли хороший способ обойти это, пожалуйста, или я придерживаюсь неправильного выбора дизайна для GTK, если обработчик сигнала создает новый обработчик сигнала, пожалуйста??
Большое спасибо.
РЕДАКТИРОВАТЬ:
Я все еще сбой, и я очень смущен, почему.
Это код дляглавная кнопка:
struct buttonData* data = (struct buttonData*) malloc(sizeof(struct buttonData));
data->IP = strdup(newDevice.IP.c_str()); // Added strdup
data->port = atoi(newDevice.port.c_str());
g_signal_connect(G_OBJECT(deviceButton), "button_press_event", G_CALLBACK(showDeviceAndConnect), (gpointer) data);
Код сгенерированной кнопки:
static void showDeviceAndConnect(GtkWidget * deviceButton, gpointer data) {
struct buttonData* toConnect = (struct buttonData *) data;
fprintf(stderr, "IP: %s, PORT: %d\n", toConnect->IP, toConnect->port); //SIGSEGV
}
Я не уверен, почему.Любая помощь будет принята с благодарностью.