无法找出为什么valgrind在我的代码中出现错误,该代码具有结构数组

时间:2016-02-11 20:23:02

标签: c

我有以下代码是大代码的代码片段。我试图释放我已在此代码中分配内存的结构数组。不幸的是,当我更改代码中的特定行时,我得到seg错误或没有segfault(无错误)。我无法找到原因。有人可以看看,并指出原因。所以,如果我在void_free_atom中将atom [i] - > natoms更改为atom [i] - > natoms-1,我得到没有segault但valgrind显示堆不是完全空闲的。注意atom [i] - > natoms是一个常数。

.appEllipseContent {
  overflow: hidden;
  white-space: nowrap;
  -ms-text-overflow: ellipsis;
  text-overflow: ellipsis;
  width:200px;
}

.appEllipseContenthover {
  overflow: visible;
  white-space: normal;
}

1 个答案:

答案 0 :(得分:0)

假设你有2个原子。然后这个循环:

for(i=0;i< atom[i]->natoms;i++){
    free(atom[i]);
}

将执行以下操作:

  • 将i设为0。
  • 检查0 < atom[0]->natoms
  • 那是真的,所以请free(atom[0])
  • 检查1 < atom[1]->natoms
  • 那是真的,所以请free(atom[1])
  • 检查2 < atom[2]->natoms - 哎呀!没有atom[2]
  • 您的程序可能在此崩溃,因为atom[2]包含无效指针。