C++ 坏内存管理?递归函数中大于1的类成员(布尔)值
我正在研究一个子图匹配问题(匹配分子中的化学官能团)。原始代码是由另一个学生编写的(在Visual C++下,没有MS特定的库),并且在Windows 上<强> Run罚款。然后,我在程序中添加了新函数,但没有改变子图匹配的算法,新程序在gcc4.2/Mac OS X下编译良好。但是,我在运行时遇到了奇怪的问题 此处相关的对象及其成员:C++ 坏内存管理?递归函数中大于1的类成员(布尔)值,c++,memory,memory-leaks,recursion,C++,Memory,Memory Leaks,Recursion,我正在研究一个子图匹配问题(匹配分子中的化学官能团)。原始代码是由另一个学生编写的(在Visual C++下,没有MS特定的库),并且在Windows 上 Run罚款。然后,我在程序中添加了新函数,但没有改变子图匹配的算法,新程序在gcc4.2/Mac OS X下编译良好。但是,我在运行时遇到了奇怪的问题 此处相关的对象及其成员: Atom:包含ID、元素、键列表(指向键对象的指针向量)、搜索标记(bool)。函数获取变量并将搜索标记设置为true或false Bond:包含一个指向原子A和原子
string Atom::getID()
{
return id;
}
string Atom::getEle()
{
return ele;
}
void Atom::mark()
{
search_mark = true;
}
void Atom::demark()
{
search_mark = false;
}
void HammettAtom::mark(Atom* assigned)
{
search_mark = true;
related_mol_atom = assigned;
}
bool Atom::isMarked()
{
return search_mark;
}
谢谢你的建议。 在Valgrind下运行程序后,很明显问题与内存泄漏有关。我移动了分配器在已识别的“deinitely lost”问题中的位置,搜索标记问题似乎已被删除。程序现在按预期运行,但内存泄漏。
不过,我还没有设法解决内存泄漏问题,我发布了一个新问题 谢谢你的建议。 在Valgrind下运行程序后,很明显问题与内存泄漏有关。我移动了分配器在已识别的“deinitely lost”问题中的位置,搜索标记问题似乎已被删除。程序现在按预期运行,但内存泄漏。
不过,我还没有设法解决内存泄漏问题,我发布了一个新问题 我做了更多的测试,在第一次调用函数之前,原子X和第一个分子原子的“search_mark”布尔值肯定为零。您是否尝试过在Valgrind下运行它?atom::isMarked()正在返回布尔值。由于某些原因,它没有打印为0或1。如果您尝试将其存储为局部变量(即在cout语句之前进行调用),会发生什么情况?@tmpearce尝试了这一点,结果是相同的。似乎是一个子类problem@AdamRosenfield没有,我只是在gdb下调试。这似乎也是哈米特原子亚类的一个问题,因为分子原子(不在该亚类中)似乎被标记为精细。我以前没有用过Valgrind,你是说Memcheck工具吗?我正在安装它。我已经做了更多的测试,在第一次调用函数之前,原子X和第一个分子原子的“search_mark”布尔值肯定为零。你试过在Valgrind下运行它吗?atom::isMarked()正在返回布尔值。由于某些原因,它没有打印为0或1。如果您尝试将其存储为局部变量(即在cout语句之前进行调用),会发生什么情况?@tmpearce尝试了这一点,结果是相同的。似乎是一个子类problem@AdamRosenfield没有,我只是在gdb下调试。这似乎也是哈米特原子亚类的一个问题,因为分子原子(不在该亚类中)似乎被标记为精细。我以前没有用过Valgrind,你是说Memcheck工具吗?我正在安装它
currently at molecule atom ID 1
size of Hammett array: 1 size of mol array: 1
size of unmarked H array: 1 size of unmarked mol array: 1
atom in um_mol array considered ID: 1 Ele: N
atom in um_h_array considered ID: N1
N1is unmarked
found same ele between mol_id 1 and ham_id N1
size of Hammett array: 3 size of mol array: 3
size of unmarked H array: 3 size of unmarked mol array: 3
atom in um_mol array considered ID: 2 Ele: H
atom in um_h_array considered ID: O2
O2is unmarked
atom in um_h_array considered ID: O1
O1is unmarked
atom in um_h_array considered ID: X
X is unmarked
mol atom ID 2 marked as X, current truth: 1
X is now marked(1)/unmarked(0) 128 and break loop
atom in um_mol array considered ID: 8 Ele: C
atom in um_h_array considered ID: O2
O2is unmarked
atom in um_h_array considered ID: O1
O1is unmarked
atom in um_h_array considered ID: X
X is unmarked
mol atom ID 8 marked as X, current truth: 2
X is now marked(1)/unmarked(0) 160 and break loop
atom in um_mol array considered ID: 17 Ele: C
atom in um_h_array considered ID: O2
O2is unmarked
atom in um_h_array considered ID: O1
O1is unmarked
atom in um_h_array considered ID: X
X is unmarked
mol atom ID 17 marked as X, current truth: 3
X is now marked(1)/unmarked(0) 128 and break loop
found same atom
Hammet group 2 checkSubproblem true
Hammett added to atom 1
string Atom::getID()
{
return id;
}
string Atom::getEle()
{
return ele;
}
void Atom::mark()
{
search_mark = true;
}
void Atom::demark()
{
search_mark = false;
}
void HammettAtom::mark(Atom* assigned)
{
search_mark = true;
related_mol_atom = assigned;
}
bool Atom::isMarked()
{
return search_mark;
}