【发布时间】:2011-04-15 06:06:54
【问题描述】:
我遇到了一个我似乎无法弄清楚的指针问题。似乎我已经以这种方式使用了 1000 次指针,所以我不太确定这里发生了什么。我有以下代码:
int iRetVal;
CycleCountOrder* cycleOrder = NULL;
CycleCountLineItem* cycleLine = NULL;
iRetVal = m_CycleCount.GetCCOrderLine(pOneLocation.szOrderNum[c], cycleOrder, cycleLine);
每当我调用 GetCCOrderLine 时,我都会进入函数内部,并将有效值分配给指针 cycleOrder 和 cycleLine。当我跳出 GetCCOrderLine 函数时,引用再次为 NULL。下面的代码是 GetCCOrderLine 是如何定义的:
头文件
int GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine);
cpp 文件
int CCycleCount::GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine)
{
CString szCurrOrderLnitem;
for(int c = 0; c < m_Orders.GetCount(); c++)
{
CycleCountOrder* currentOrder = m_Orders[c];
for(int d = 0; d < currentOrder->m_LineItems.GetCount(); d++)
{
CycleCountLineItem* currentLine = currentOrder->m_LineItems[d];
szCurrOrderLnitem.Format("%s-%d-%d", currentOrder->szOrderNum, currentLine->nLnitemNum, currentLine->nSubitemNum);
if(szCurrOrderLnitem == szOrderLnitem)
{
cycleOrder = currentOrder;
cycleCountLine = currentLine;
return FUNC_OK;
}
}
}
return FUNC_ERROR;
}
此外,在上述代码中访问的两个数组用于为传入的指针赋值,声明如下。这些数组也填充了使用 new 运算符创建的对象:
CArray<CycleCountOrder*, CycleCountOrder*> m_Orders;
CArray<CycleCountLineItem*, CycleCountLineItem*> m_LineItems;
【问题讨论】:
-
请不要使用
<code>标签来格式化你的代码,而是缩进4个空格,或者按下101010编辑器按钮。我现在为你修复了格式:-)
标签: c++ pointers pass-by-reference pass-by-value