64,654
社区成员
发帖
与我相关
我的任务
分享
struct Node { /* 此处没有指针成员 */ };
class NodeList // Node的动态数组
{
private:
Node *nodes;
int capacity;
int length;
public:
NodeList()
{
nodes = new Node[256];
memset(nodes, 0, 256*sizeof(Node));
capacity = 256;
length = 0;
}
int GetLength() { return length; }
Node* GetNextNode() //用此函数进行添加Node操作,必要时扩展存储空间
{
if (length == capacity)
{
capacity <<= 1;
cout << "Increasing capacity to " << capacity << "...";
Node *temp = new Node[capacity];
memcpy(temp, nodes, length*sizeof(Node) );
delete []nodes;
nodes = temp;
cout << "Complete\n";
}
return &nodes[length++];
}
Node& operator[](int i) const { return nodes[i]; }
~NodeList()
{
//delete []nodes; //按说应该有这句的,但无论有没有,程序都崩溃。本来期望注释掉这句的话,无非是个内存泄露,而内存泄露在main函数执行完时才会检测到,至少在return 0时下断点应该能断到。然而仍然是没断到就崩溃了
}
};
class Solver
{
private:
NodeList nodes;
int front;
bool tag;
public:
Solver(InputFunc f);
void Solve();
~Solver(void);
};
void Solver::Solve() //函数中涉及指针操作的只有以下片段
{
...
Node temp;
...
Node* n = nodes.GetNextNode();
memcpy(n, &temp, sizeof(Node));
...
int len = nodes.GetLength();
qsort(&nodes[front], len-front, sizeof(Node), CompareNode); //目前认为疑点在这里,front肯定没越界,不然早就里面崩了
...
}
int _tmain(int argc, _TCHAR* argv[])
{
Solver *solver = new Solver(InputBoard);
solver->Solve();
delete solver; //崩溃:corruption of heap什么的
return 0;
}
GetNextNode
函数中的delete []nodes
难道qsort这么用真的会把内存写坏。。