void CMainWindow::CreateAT()
{
int b[73] = {
1,2,5,1,3,6,2,4,7,3,
8,1,6,10,2,5,7,11,3,6,
8,12,4,7,13,10,14,5,9,11,
15,6,10,12,16,7,11,13,17,8,
12,18,9,15,19,10,14,16,20,11,
15,17,21,12,16,18,22,13,17,23,
14,20,15,19,21,16,20,22,17,21,
23,18,22
};
int c[24] = {
1,2,3,3,2,3,4,4,3,2,
4,4,4,3,3,4,4,4,3,2,
3,3,3,2
};
for(int i = 0; i < 24; i++)
{
m_nNode[i].m_data = i;
m_nNode[i].m_fFlag = 0;
}
int j = 0;
for(int k = 0; k < 24; k++)
{
CNode *pOld = &m_nNode[k];
pOld->m_pPrevNode = NULL;
for(int m = 0; m < c[k]; m++)
{
CNode *pNew = new CNode;
pNew->m_data = b[j];
pNew->m_fFlag = 0;
pOld->m_pNextNode = pNew;
pNew->m_pPrevNode = pOld;
pOld = pNew;
j++;
delete pNew;
}
pOld->m_pNextNode = NULL;
delete pOld;
}
}
以上程序是实现一个邻接表的程序 错误出在最后一个delete 查过一些资料 可能是因为pOld指针的指向发生变化后导致不能删除 但是找不到合适的解决方法
各位高手帮帮忙!
{
int b[73] = {
1,2,5,1,3,6,2,4,7,3,
8,1,6,10,2,5,7,11,3,6,
8,12,4,7,13,10,14,5,9,11,
15,6,10,12,16,7,11,13,17,8,
12,18,9,15,19,10,14,16,20,11,
15,17,21,12,16,18,22,13,17,23,
14,20,15,19,21,16,20,22,17,21,
23,18,22
};
int c[24] = {
1,2,3,3,2,3,4,4,3,2,
4,4,4,3,3,4,4,4,3,2,
3,3,3,2
};
for(int i = 0; i < 24; i++)
{
m_nNode[i].m_data = i;
m_nNode[i].m_fFlag = 0;
}
int j = 0;
for(int k = 0; k < 24; k++)
{
CNode *pOld = &m_nNode[k];
pOld->m_pPrevNode = NULL;
for(int m = 0; m < c[k]; m++)
{
CNode *pNew = new CNode;
pNew->m_data = b[j];
pNew->m_fFlag = 0;
pOld->m_pNextNode = pNew;
pNew->m_pPrevNode = pOld;
pOld = pNew;
j++;
delete pNew;
}
pOld->m_pNextNode = NULL;
delete pOld;
}
}
以上程序是实现一个邻接表的程序 错误出在最后一个delete 查过一些资料 可能是因为pOld指针的指向发生变化后导致不能删除 但是找不到合适的解决方法
各位高手帮帮忙!
解决方案 »
- 'struct' type redefinition
- 实模式下怎么得到MAC地址?
- 怎样把BMP图象数据转换成BMP图象并显示在Pictrue控件上
- 修改LIB文件后,重新编译出错
- 关于EDIT控件请大哥帮忙!!!急用
- 请教如何创建一个一定大小的文件?
- 菜鸟刚学C++,求一SOCKET通信的完整代码,有客户,服务两个程序的,由于我这里只能上CSDN,希望大家帮我找一段代码
- 帮帮忙!!!怎么解决这个程序出现的三个错误.
- 一个很急很菜的问题,文件结尾的问题
- 关于jpeg文件的一个问题:怎么得到图片的实际大小?(单位英寸)
- 控制台下,new生成后了字符数组,使用strncpy之后,一delete就报错
- iocp 能知道有事件发生么,比如有数据到达
delete pNew;
delete pOld; 重复删除
不过现在又出现个问题 就是
for(int m = 0; m < c[k]; m++)
{
CNode *pNew = new CNode;
pNew-> m_data = b[j];
pNew-> m_fFlag = 0;
pOld-> m_pNextNode = pNew;
pNew-> m_pPrevNode = pOld;
pOld = pNew;
j++;
delete pNew;
}
这个程序段中 第一次执行循环体的时候创建pNew指针没有问题 再执行这个语句
CNode *pNew = new CNode;
就会出现问题 就是程序忽然跳到一个汇编语言形式的窗口处 还有个提示框
user breakpoint called from code at 0X7c921230
而且pOld = pNew之后,又delete pNew,那pOld指向的空间已经无效了!
说句不好听的,完全看不出有什么逻辑可言,所以更别提修改了……
我的想法是用pOld后移 通过内层循环把几个结点连起来 所以我想用pOld在循环中来指向最后一个结点
然后删除原来的pNew指针 重新创建一个pNew再接到pOld指向结点的后面
pOld = pNew 这一句我是想让pOld指向pNew指向的结点
然后出来内层循环再删除pOld 再出来外层循环 重新创建pOld
CNode *pNew = new CNode;
pNew-> m_data = b[j];
pNew-> m_fFlag = 0;
pOld-> m_pNextNode = pNew;
pNew-> m_pPrevNode = pOld;
pOld = pNew;
//在这个地方不能使用赋值,主要是因为内存只是一个指向的关系
//并不知道其具体指向的内容是什么,
j++;
delete pNew;
另外:删除的顺序应该是先删除,再置NULL,这里的NULL只是为了防止也指针的出现。