事故现场来源于一个链表的删除功能,先看代码

// 移除节点
STGoodsInfo* SingleLink::Remove(STGoodsInfo*pHead, int iPos)
{
if(NULL == pHead)
{
return NULL;
}
if(iPos <=0)
{
return NULL;
}

STGoodsInfo* pTemp = pHead->pNext;

// 遍历到待删除节点的前一个节点

for(int i = 1;i<iPos;i++)
{
pHead = pHead->pNext;
pTemp = pHead;
}

/*
STGoodsInfo* pDel = pTemp->pNext; // 第二个节点(待删除节点)
pTemp->pNext = pDel->pNext;
free(pDel);
pDel = NULL;
*/
// 待删除节点
STGoodsInfo* pDel = pTemp->pNext;
pTemp->pNext == pDel->pNext;

free(pDel);
pDel = NULL;

return pHead;
}

很纳闷在打印链表的时候,程序崩溃。如下图所示的AB两段代码,为什么用A带就能正常运行,B代码不行呢?

C/C++的一个字符陷阱_i++

在这里有一个陷阱,B代码不小心讲"=" 打成了"==" ,从而引发BUG,但是这样的写法,编译器是不会提示错误的,引以为戒吧