简单C代码(指针)出错

时间:2010-10-31 12:05:18

标签: c pointers

在以下代码中,使用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

3 个答案:

答案 0 :(得分:6)

image1 = key行之后,image1key指向相同的内存区域。

我想xmlFree(key);改变了这个记忆区域。 如果你希望这个字符串的内容存活到xmlFree,你应该考虑在释放指针之前使用函数strcpy

答案 1 :(得分:0)

您还没有提到image1key是什么?我猜指针(因为标签和因为函数名称+ c-tag)。如果是这样,问题是在调用xmlFree(key);之前调用printf - keyimage1都指向相同的内存位置(如果是指针),那么这就是问题。将xmlFre(key)放在printf之后。

另外,您应该在第二个if前面添加else :(

答案 2 :(得分:-1)

就我可以从那段简短的无证代码中看到的那样,调用xmlfree()并没有多大意义,它将例如1.png转换为0p g。

但更改var image1的真正原因是因为image1是对key的引用,然后通过调用xmlfree(key)进行更新。