将指针设置在其内存范围

时间:2015-06-26 20:42:19

标签: c++

我正在编写一些代码来进行位图混合,我的函数有很多选项。我决定使用switch来处理这些选项,但后来我需要将switch置于循环中(我读取它会影响性能)或为每个switch情况分配循环(使代码太大了)。我决定用第三种方式做到这一点(见下文):

/* When I need to use static value */

BYTE *pointerToValue = (BYTE*)&blendData.primaryValue;
BYTE **pointerToReference = &pointerToValue;
*pointerToReference = *pointerToReference - 3;

/* When I need srcLine's 4th value (where srcLine is a pointer to BYTE array) */

BYTE **pointerToReference = &srcLine;

while (destY2 < destY1) {
    destLine = destPixelArray + (destBytesPerLine * destY2++) + (destX1 * destInc);
    srcLine = srcPixelArray + (srcBytesPerLine * srcY2++) + (srcX1 * srcInc);
    for (LONG x = destX1; x < destX2; x++, destLine += destInc, srcLine += srcInc) {
        BYTE neededValue = *(*pointerToReference + 3); //not yet implemented
        destLine[0] = srcLine[0];
        destLine[1] = srcLine[1];
        destLine[2] = srcLine[2];
        if (diffInc == BOTH_ARE_32_BIT)
            destLine[3] = srcLine[3];
    }
}

有时我可能需要使用srcLine[3]blendData.primaryValue。使用srcLine[3]可以轻松访问*(*pointerToReference + 3),但访问blendData.primaryValue我需要将指针减少3才能保持相同的表达式(*(*pointerToReference + 3))。

所以这是我的问题:

  1. 如果稍后将指针设置在其内存范围之外是否安全 要回来了?
  2. 我100%确定它超出范围时不会被使用,但可以 我确定它不会导致任何类型的访问冲突吗?
  3. 也许有某种类似的替代品可以使用一个变量 获取srcLine[3]blendData.primaryValue的值 没有if(),就像在我的代码示例中完成的那样?

1 个答案:

答案 0 :(得分:2)

由于#2没有使用,#1的答案是肯定的,它是完全安全的。因为#1,所以不需要#3。 : - )

只有在实际使用指针时才会发生访问冲突。