代码之家  ›  专栏  ›  技术社区  ›  w2lame

简单C代码错误(指针)

  •  0
  • w2lame  · 技术社区  · 14 年前

    在以下代码中,使用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 回复  |  直到 14 年前
        1
  •  6
  •   FabienAndre    14 年前

    线后 image1 = key , image1 key 指向相同的内存区域。

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

        2
  •  0
  •   Kiril Kirov    14 年前

    你没有提到什么 image1 key ?我猜测指针(因为标记和函数名+C标记)。如果是这样,问题在于打电话 xmlFree(key); 打电话之前 printf -两者 钥匙 图像1 指向相同的内存位置(如果是指针),这就是问题所在。放 xmlFre(key) 普林特 .

    你也应该加上 else 在第二个if(:

        3
  •  -1
  •   sergej    14 年前

    据我从这段未记录的代码中看到的,调用xmlfree()是没有意义的,它将例如1.png转换为0p_?.5 g。

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