main.c:132:26: warning: "/*" within comment
main.c: In function ‘importSettings’:
main.c:152: warning: control reaches end of non-void function
main.c: In function ‘cs_init_missions’:
main.c:84: warning: control reaches end of non-void function
j@jonux:~/Projects/csgtk/c$ ./a.out
Segmentation fault
j@jonux:~/Projects/csgtk/c$
Это результат компиляции с -Wall и запуском программы.Не идеально.
Похоже, ошибка связана с кодом ниже.
static xmlDocPtr importSettings(char file[], GtkBuilder *builder) {
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if(xmlStrEqual(cur->name, (const xmlChar *) "options")) {
cur = cur->xmlChildrenNode;
while (cur != NULL) {
cur = cur->next;
}
}
cur = cur->next;// <- Segfault is here
}
}
Кажется очевидным, что внешний цикл пытается установить cur
в cur->next
, когда cur == NULL
вызываетСигфоМожно ли восстановить цикл, чтобы избежать этого?(Я думал о цикле do-while, но это не сработало)
Это единственный способ избежать этого, чтобы заключить оператор в оператор if?
Я пытался что-то сделать, чтобырешить проблему.Я понимаю, почему он вообще не работал, но все равно не работает, учитывая вывод ниже:
static xmlDocPtr importSettings(char file[], GtkBuilder *builder){
if (file == NULL) {
file = "CsSettings.xml";
}
//commented stuff here
settingsTree = xmlParseFile(file);
//commented stuff here
cur = xmlDocGetRootElement(settingsTree);
cur = cur->xmlChildrenNode;
while (cur != NULL){
if(xmlStrEqual(cur->name, (const xmlChar *) "options")){
cur = cur->xmlChildrenNode;
while (cur != NULL){
//commented stuff here
if(cur->next == NULL)
cur = cur->parent;
else
cur = cur->next;
}
}
cur = cur->next;
}
}
Есть ли способ получить printf()
, чтобы выдать результат здесь?Ошибка сегментации каким-то образом останавливает его работу даже до того, как ошибка возникнет.