在以下代码中,使用libxml库:
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
答案 0 :(得分:6)
在image1 = key
行之后,image1
和key
指向相同的内存区域。
我想xmlFree(key);
改变了这个记忆区域。
如果你希望这个字符串的内容存活到xmlFree,你应该考虑在释放指针之前使用函数strcpy。
答案 1 :(得分:0)
您还没有提到image1
和key
是什么?我猜指针(因为标签和因为函数名称+ c-tag)。如果是这样,问题是在调用xmlFree(key);
之前调用printf
- key
和image1
都指向相同的内存位置(如果是指针),那么这就是问题。将xmlFre(key)
放在printf
之后。
另外,您应该在第二个if前面添加else
:(
答案 2 :(得分:-1)
就我可以从那段简短的无证代码中看到的那样,调用xmlfree()并没有多大意义,它将例如1.png转换为0p g。
但更改var image1的真正原因是因为image1是对key的引用,然后通过调用xmlfree(key)进行更新。