Pages : 1
#1 Le 05/01/2008, à 14:36
- Darunia
SIGSEGV sur gtk_widget_destroy
Salut à tous,
Je debute le GTK, et la, je dois avouer que je seche.
En effet, je me sert d'un GtkFileSelection pour selectionner un fihcier (vous l'auriez deviné ;-)).
Le problème se situe au moment au souhaite detruire ce GtkFileSelection:
//Create file selection dialog
GtkWidget* pFileSelection = gtk_file_selection_new("Open file");
//Make dialog modal
gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE);
if(gtk_dialog_run(GTK_DIALOG(pFileSelection)) == GTK_RESPONSE_OK)
{
const gchar* gFile;
char File[512];
gFile = gtk_file_selection_get_filename(GTK_FILE_SELECTION(pFileSelection));
strcpy(File, gFile);
CurrentObject = new CObject();
CurrentObject->SetName("12");
gtk_widget_destroy(GTK_WIDGET(pFileSelection)); //ERREUR ICI (SIGSEGV)
}
Le truc ce que l'erreur apparait seulement quand j'appel CurrentObject->SetName en passant en paramètre une chaine qui fait plus de 1 caractères (?!?).
Voici le stack que j'ai lorsque je reçoi le SIGSEGV :
#0 0xb787c319 g_type_check_instance_is_a() (/usr/lib/libgobject-2.0.so.0:??)
#1 0xb7863845 g_object_ref() (/usr/lib/libgobject-2.0.so.0:??)
#2 0xb77bdc01 g_list_foreach() (/usr/lib/libglib-2.0.so.0:??)
#3 0xb7cb703a ??() (/usr/lib/libgtk-x11-2.0.so.0:??)
#4 0x821f180 ??() (??:??)
#5 0xb7863810 ??() (/usr/lib/libgobject-2.0.so.0:??)
#6 ( ??() (??:??)
Voici le code de CurrentObject qui est de type CObject :
class CObject
{
friend class CObjectParser;
protected:
char Name[256];
char Path[256];
std::vector<CFunction*> Functions;
int Id;
public:
int GetId();
void SetId(int);
int GetFunctionCount();
void GetName(char*, unsigned long);
void SetName(char*);
void GetPath(char*, unsigned long);
std::vector<CInstruction*>::iterator GetIterator();
CObject(int, char*, char*);
CObject();
~CObject();
};
Le code de SetName :
void CObject::SetName(char* val)
{
if(strlen(val) >= 256)
throw "CObject SetName : Buffer Overflow";
strcpy(Name, val);
}
Merci donc à l'ame charitable qui pourra jeter un oeil à ce code. Il doit y avoir une subtilité mais laquelle ???
Dernière modification par Darunia (Le 05/01/2008, à 14:36)
Hors ligne
#2 Le 14/01/2008, à 23:16
- Darunia
Re : SIGSEGV sur gtk_widget_destroy
Bon, problème résolu. Apres trop de soucis avecv GTK+, j'ai migré mon appli en GTK MM : beaucoup plus simple et beaucoup plus stable !
Hors ligne