вызов free () сбоев с «недопустимым указателем» [дубликат]

Вы можете получить ссылку на Scene и Window из ссылки на вашу кнопку. Оттуда вам решать, как вы хотите показать новое представление.

Вот как вы получаете эти ссылки:

Scene scene = btnSignIn.getScene();
Window window = scene.getWindow();
Stage stage = (Stage) window;

Вы можете изменить представление, изменив корень вашей сцены:

FXMLLoader loader = ... // create and load() view
btnSignIn.getScene().setRoot(loader.getRoot());

Или вы можете изменить всю сцену:

FXMLLoader loader = ... // create and load() view
Stage stage = (Stage) btnSignIn.getScene().getWindow();
Scene scene = new Scene(loader.getRoot());
stage.setScene(scene);
3
задан MitchellSalad 28 January 2012 в 09:27
поделиться

2 ответа

Попробуйте использовать valgrind для отладки вашей проблемы.

Если ваша ошибка сохраняется даже при удалении всех free, это может быть связано с тем, что какой-то код переполняет свою зону памяти ( например переполнение буфера).

5
ответ дан Basile Starynkevitch 19 August 2018 в 02:38
поделиться

Если ваш код уничтожает указатель, используемый другим кодом, другой код может вызвать вызов free с недопустимым указателем. Вероятно, вы получаете доступ к некоторой памяти, которой вы не владеете.

Это может произойти много, вот два общих:

1) Если вы объявите массив, подобный int f[7];, последний элемент массива - f[6]. Изменение f[7] может испортить чью-либо память.

2) Если вы сохраняете указатель на объект, выделенный в стеке, этот объект выходит из области видимости, а затем вы что-то изменяете с помощью этого указателя, вы можете поврежденная чужая память.

6
ответ дан David Schwartz 19 August 2018 в 02:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: