2010-10-31 2 views
0

В follwoing код на, используя библиотеки Libxml:Ошибка в простом коде C (указатели)

key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1); 
       if (flag == 1) 
       { 
         image2 = key; 
         printf("the image 2 is %s \n", image2); 
         flag = 2; 
       } 
       if(flag == 0) 
       { 
         image1 = key; 
         printf("the image 1 is %s \n", image1); 
         flag = 1; 
       } 
        //printf("SRC of the file is: %s\n", key); 

       xmlFree(key); 
      printf("the image 1 is %s \n", image1); 

два Printf дают мне разные выходы.

Выход:

the image 1 is 1.png 
the image 1 is 0p� g 
the image 2 is 2.png 
the image 1 is 0p� g 

ответ

6

После линия image1 = key, image1 и key указывают на ту же область памяти.

Я полагаю, что xmlFree(key); изменить эту область памяти. Если вы хотите, чтобы содержимое этой строки сохранилось в xmlFree, вам следует использовать функцию strcpy перед удалением указателя.

+0

Спасибо, что он работал как шарм. – w2lame

0

Вы не упомянули, что это image1 и key? Я думаю, указатели (из-за тега и из-за имени функции + c-tag). Если это так, проблема заключается в вызове xmlFree(key); перед вызовом printf - и key, и image1 указывают на то же место памяти (если это указатели), вот в чем проблема. Поместите xmlFre(key) после printf.

Также следует добавить else перед второй, если (:

-1

Насколько я могу видеть его с этой короткой части незарегистрированной кода, это не имеет смысла называть xmlfree(), который преобразует например 1.png к 0p г.

но реальная причина, почему переменная image1 изменяется потому, что image1 является ссылкой на ключ, который затем обновление путем вызова xmlfree (ключ).

+0

Да, спасибо, проблема. – w2lame

Смежные вопросы