所以我得到了需要修复的代码示例。根据我的收集,它需要一个数组,将其反转,然后计算其中的所有元素。这是代码。//-------------------------------------------------------------------void ReverseTheArray( const short *pArrayStart, const int nArrayByteLength ){ const short *pArrayEnd = (pArrayStart + nArrayByteLength); while(pArrayStart != pArrayEnd) { short tmp = *pArrayStart; *pArrayStart = *pArrayEnd; *pArrayEnd = tmp; pArrayStart++; pArrayEnd--; }}//-------------------------------------------------------------------int CountTheArrayContents( const short *pArrayStart, int nNumEntries ){ assert(nNumEntries-- > 0); int nCount = 0; for(unsigned uArrayIndex = nNumEntries; uArrayIndex >= 0; uArrayIndex--) { nCount += pArrayStart[uArrayIndex]; } return nCount;}const short g_nSomeNumbers[] ={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//-------------------------------------------------------------------int main(){ short *pDataArray = new short[10]; memcpy(pDataArray, g_nSomeNumbers, sizeof(g_nSomeNumbers)); ReverseTheArray(pDataArray, 10*sizeof(short)); int nCount = CountTheArrayContents(pDataArray, 10); printf("Sum total is %0.02f\n", nCount); return 0;}我对问题是什么有想法,但似乎无法找出解决问题的简单方法,不需要重写整个代码。如果任何人都可以阅读并看到如何解决错误,将不胜感激。我要提到一些我认为会引起问题的事情。ReversTheArray()函数中的所有参数和pArrayEnd变量均为const,但试图在while循环中更改,这将引发错误。应该删除const吗?有没有理由将const用于此?如果删除const,则尝试在CountTheArrayContents()函数中运行for循环时发生运行时错误,该循环表示未处理的异常并说“访问冲突读取位置0x003DFFFE”。在那个上画一个完整的空白。再次感谢您对代码的任何帮助,非常感谢你们。PS。创建反向和累加函数是一个挑战,因此我正在寻找代码的修复方法,而不是删除这两个函数。谢谢PSS。感谢所有回答。我很高兴做到了这一点(这是我发布的关于自己的第一个问题),并且你们都为我提供了巨大的帮助。我必须说我学到了很多东西。 最佳答案 以字节为单位添加实际长度会增加太多,因为指针算术是根据所指向类型的大小的单位定义的。即,pArrayEnd变为&pDataArray[10 * sizeof(short)]而不是&pDataArray[10]。调用反向函数时,您不需要乘以sizeof(short)。或者,可以在计算nArrayByteLength的初始值时将sizeof(short)除以pArrayEnd。第二个问题是您仅分配了10个元素(0..9),这意味着&pDataArray[10]将是数组之外的一个元素。然后,反向功能会尝试将数据分配给此未分配的内存区域,这可能会导致问题。该函数应如图所示初始化pArrayEnd,但紧随其后,应将pArrayEnd减1。这样,您就不会分配给可能不属于您的内存。递减pArrayStart == pArrayEnd时请注意pArrayEnd。另一种测试是确保nArrayByteLength != 0。另一个问题是,如果数组具有偶数个元素,并且您尝试进行逆转。如果它确实有偶数(例如10),则pArrayStart将指向pDataArray[4],pArrayEnd将指向pDataArray[5],并且在分配数据后,pArrayStart++将使pArrayStart指向和pDataArray[5]指向pArrayEnd--。然后,(6,3),(7,2),(8,1),(9,0),...换句话说,在这种情况下,pDataArray[4]永远不会等于pArrayStart。相反,您应该确保pArrayEnd。希望这可以帮助!另外,是否有不使用pArrayStart < pArrayEnd的原因?就是想。编辑可以将累积函数重写为以下形式,这将避免在执行相同操作时std:: reverse宏出现问题:int CountTheArrayContents( const short *pArrayStart, int nNumEntries ){ int count = 0; assert(nNumEntries); while (nNumEntries--) count += pArrayStart[nNumEntries]; return count;}希望assert不会溢出。 10-08 04:10