gpt4 book ai didi

c++ - Xcode 5.0.1 中未报告段错误

转载 作者:行者123 更新时间:2023-11-28 07:19:16 24 4
gpt4 key购买 nike

我一直在调试一段代码,但很难发现其中的一个错误。我已经声明并排列成这样

char* Cdiff[320];

然而,当在 Xcode 5.0.1 中运行应用程序时,它会在代码的其他部分崩溃(根据我的说法)与该数组没有任何关系。

我正在使用的代码示例是

...
...
//patchSize = 4, blockSize = 10
uchar *Cdiff = new uchar[(patchSize*patchSize)*2 * blockSize];

// FOR EACH BLOCK OF PATCHES (there are 'blockSize' patches in one block)
for (uint iBlock = 0; iBlock < nBlocks; iBlock++)
{
// FOR EACH PATCH IN THE BLOCK
for(uint iPatch = iBlock*blockSize; iPatch < (iBlock*blockSize)+blockSize; iPatch++)
{
// GET THE POSITION OF THE upper-left CORNER(row, col) AND
// STORE THE COORDINATES OF THE PIXELS INSIDE THE CURRENT PATCH (only the current patch)
uint iPatchV = (iPatch*patchStep)/camRef->getWidth();
uint iPatchH = (iPatch*patchStep)%camRef->getWidth();
for (uint pRow = iPatchV, pdRow = 0; pRow < iPatchV+patchSize; pRow++, pdRow++)
{
for (uint pCol = iPatchH, pdCol = 0; pCol < iPatchH+patchSize; pCol++, pdCol++)
{
patchPos.push_back(Pixel(pCol, pRow));
}
}

// GET THE RIGHT AND DOWN NEIGHBORS TO COMPUTE THE DIFFERENCES
uint offset = 0;
for (Pixel p : patchPos)
{
uint r = p.getY();
uint c = p.getX();

uchar pixelV = ((uchar*)camRef->getData())[r*imageW+c];

uint cRightNeighbor = c+patchStep;
uchar pixelVrightP = 0;

if (cRightNeighbor < imageW)
{
pixelVrightP = abs(pixelV - ((uchar*)camRef->getData())[r*imageW+cRightNeighbor]);
}

uint rDownNeighbor = r+patchStep;
uchar pixelVbelowP = 0;

if (rDownNeighbor < imageH)
{
pixelVbelowP = abs(pixelV - ((uchar*)camRef->getData())[rDownNeighbor*imageW+c]);
}

//---This is the right way to compute the index.
int checking = (iPatch%blockSize)*(patchSize*patchSize)*2 + offset;
//---This lines should throw a seg_fault but they don't
Cdiff[iPatch*(patchSize*patchSize)*2 + offset] = pixelVrightP;
Cdiff[iPatch*(patchSize*patchSize)*2 + offset+(patchSize*patchSize)] = pixelVbelowP;
offset++;
}

...
...

}
}

我忘记在计算索引时使用 blockSize,所以在 block 的每次迭代中它都从第 0 个位置开始写入。

谁能解释一下 Xcode 如何/为什么不正确报告这些类型的 seg_faults?实际上,我必须在 Linux 上测试我的代码并进行调试,以便能够捕获该错误。 Xcode 中是否有类似于 Valgrid 的工具可以帮助我进行调试?

最佳答案

只有当您的代码访问不属于它或不存在的内存时,您才会遇到段错误。因为 CDiff 在堆上,所以您的进程可能拥有并可以访问它前后的内存,但尚未分配。所以没有段错误是有道理的。 (它也可能是为其他变量分配给您的内存,因此您正在覆盖该变量,但它直到后来才出现。)

您可以打开 malloc scribbling and guard malloc帮助找到其中的一些问题。您也可以使用 Instrumentsclang static analyzer .

关于c++ - Xcode 5.0.1 中未报告段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com