我想把链表中的数据全部删除,应该怎么做呢?
直接delete pHead好像不行吧?
正确的方法应该怎么处理?
直接delete pHead好像不行吧?
正确的方法应该怎么处理?
解决方案 »
- 能否捕获本进程被其他进程结束时的消息?
- 重载OnAppect()出现的类型转换问题
- 网络通信问题,帮我看看这段代码为什么不能发送
- listCtrl问题
- 小问题 请帮忙吧~~
- 问一下,在Visual Studio.net这一套开发工具中,包括ASP.net嘛?
- 已知一个字符的ASCII码,怎么取得这个字符??
- 小弟当前要把一个小型c++类库转变为com类库。有什么好的方案?(100分!!!)
- shell编程方面的书有吗!!!来了有分!
- SOS!高手!高手!请教一下如何实现局域网中的文件查找?????
- --------------高人请进:如何才能做到对优化程序[A.]运行速度、[B.]内存占用、[C.]操作性能,能够对程序进行[D.]浮点的汇编级优化?
- 怎么知道指定DC的宽度和高度?不是屏幕DC。
{
delete list.GetNext(pos);
}list.RemoveAll();
while(p != NULL)
{
if(pHead->pNext != NULL)
{
pHead->pNext = pHead->pNext->pNext;
delete p;
p = pHead->pNext;
}
}
看看上面的代码有什么问题,总在执行循环当中有错误,程序崩溃
LineLink *pLs;
while(p != NULL)
{
pLs = p->pNext;
delete p;
p = pLs;
}
while(p != NULL)
{
if(pHead->pNext != NULL)
{
pHead->pNext = pHead->pNext->pNext;
delete p;
p = pHead->pNext;
}
}
当pHead->pNext指向最后一个结点的时候,pHead->pNext->pNext没有了,就出错了
LineLink* p = pHead->pNext;
while(q != NULL)
{
delete q;
q=p;
if(p->p->pNext!=NULL)
p=p->pNext;}
Debug Assertion Fieied!
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
"终止" “重试” “取消”谁知道什么问题?
LineLink *pLs;
while(p != NULL)
{
pLs = p->pNext;
delete p;
p = pLs;
}
if(pHead != NULL)
delete pHead;
以上是修改后的代码,删除头节点了,但还是出现上面说的错误
{
double x;
double y;
};
struct LineStruct
{
int nFID; //fearuteID
int nNodeNum;
NODE startNode;
NODE endNode;
double dDistance; //线的长度,一般单位为公里
//属性字段
int nLinkID;
int nSNodeID;
int nENodeID;
int nRoadClass;
int nBuildingPlan;
int nTunnel;
int nBridge;
int nMedianStrip;
int nLines;
int nWidth;
CString sRoadName;};
//链表
struct LineLink
{
LineStruct lineStruct;
LineLink * pNext;
};//向链表中添加元素
void CMapDiffersView::AddtoLineLink(LineLink *head,LineStruct lineStruct)
{
LineLink *T = head;
LineLink *pNewLink = new LineLink ;
pNewLink->pNext = NULL;
memcpy((void*)(&pNewLink->lineStruct),(void*)(&lineStruct),sizeof(lineStruct));
BOOL added = FALSE;
//先比较head头节点
if(head->lineStruct.startNode.x > pNewLink->lineStruct.startNode.x)
{
pNewLink->pNext = head;
head = pNewLink;
return;
}
else if(head->pNext == NULL)
{
head->pNext = pNewLink;
return;
}
while(head->pNext != NULL)
{
if((head->pNext->lineStruct.startNode.x > pNewLink->lineStruct.startNode.x)
/* &&(head->pNext->lineStruct.startNode.y > pNewLink->lineStruct.startNode.y)*/)
{ pNewLink->pNext = head->pNext;
head->pNext = pNewLink;
added = TRUE;
break;
}
head = head->pNext;
}
if(!added)
{
head->pNext = pNewLink;
}
head = T;
}
LineLink* CMapDiffersView::CreateLineLink(LineLink *head,LineStruct lineStruct)
{
head->pNext = NULL;
head->lineStruct.nFID = lineStruct.nFID;
head->lineStruct.nLinkID = lineStruct.nLinkID;
head->lineStruct.dDistance = lineStruct.dDistance;
head->lineStruct.startNode.x = lineStruct.startNode.x;
head->lineStruct.startNode.y = lineStruct.startNode.y;
head->lineStruct.endNode.x = lineStruct.endNode.x;
head->lineStruct.endNode.y = lineStruct.endNode.y;
head->lineStruct.nNodeNum = lineStruct.nNodeNum;
head->lineStruct.nBridge = lineStruct.nBridge;
head->lineStruct.nBuildingPlan = lineStruct.nBuildingPlan;
head->lineStruct.nLines = lineStruct.nLines;
head->lineStruct.nMedianStrip = lineStruct.nMedianStrip;
head->lineStruct.nRoadClass = lineStruct.nRoadClass;
head->lineStruct.sRoadName = lineStruct.sRoadName;
return head;}
下面是调用的代码
//添加到链表
if(m_lineHead1 == NULL)
{
m_lineHead1 = new LineLink;
CreateLineLink(m_lineHead1,lineStruct1);
}
else
{
AddtoLineLink(m_lineHead1,lineStruct1);
}
以上是相关的部分函数,不是我不贴,是太长了
要是方便的话把代码发我邮箱里吧
[email protected]