c - 我怎样才能摆脱VC中的0xFEEFEE

标签 c visual-c++

我正在用 VC++ 2008 进行 C 语言编程。我模拟 adjList 进行图形实现。我可以轻松地在两个顶点之间添加边并打印图形。 我想删除两个顶点之间的边并再次打印图形。无论我做什么,删除边缘后我都无法打印图形。我得到 0xfeefee :( 这是什么?我该如何解决这个程序。

我的删除函数和打印图表函数如下所示。

  void deleteEdge(Graph G, Vertex V, Vertex W)
{ 
 Edge list,prev,temp;
 list=V->list;  
  prev=NULL;
  // 
  while(list!=NULL && list->to->value!=W->value){
   prev=list;
   list=list->next;
  }
  // have found the element.
  if(list!=NULL){
   temp=list;
   // if first element of list is deleted.
   if(prev==NULL)
   list=list->next;
   else
   prev->next=list->next;

   // reallocate.
   free(temp);

  }
}




    void GRAPHprint(Graph G)
    {
     Vertex tmp;
     Edge list;
     for(tmp = G->head;tmp!=NULL;tmp=tmp->next)
     {
      fprintf(stdout,"V:%d\t",tmp->value);
      list=tmp->list;
      while(list!=NULL)
      {

       fprintf(stdout,"%d\t",list->to->value);
       list=list->next; 

      }
      fprintf(stdout, "\n");
     }
     system("pause");
    }

最佳答案

在您的代码中,如果您匹配并因此尝试删除列表的第一个边缘,那么您最终将取消引用已释放的指针。

list=list->next 应该是 V->list=list->next,否则您实际上只是更新本地列表 (list) 而不是输入的列表 (V->list)。

0xfeeefeee 表示您正在读取堆上已删除的内存,即您正在取消引用之前调用过 free 的指针。这只发生在 Debug模式下,它的目的是帮助您捕获此类问题!看这个wikipedia entry有关这个神奇数字(和其他数字)的更多信息。

关于c - 我怎样才能摆脱VC中的0xFEEFEE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444059/

相关文章:

c++ - 如何在 C 或 C++ 中全局初始化数组?

无法将参数 'char (*)[30]' 转换为 'char*' 到 '1'

visual-c++ - 通过 curl 和 Visual C++ 2010 的 HTTP+SSL

c++ - 为什么我的 Winsock 应用程序有时在 listen() 等待,有时在 accept() 等待?

两个单独字符串的前半部分的串联

c - 你如何在C中显示 "%5d"?

c - 代码 : Incorrect checksum for freed objects?

c - 矩阵内对角线交点的元素北、南、东、西

c++ - 歧义语句 C++-AMP : (extent) is ambiguous

c++ - 打开简历; C++;从线性三角法矩阵中提取点云点 (x,y,z)