c ++ malloc和二维数组没有保留足够的内存

时间:2017-12-06 15:29:50

标签: c++ arrays malloc

我需要用malloc创建一个2维数组,这样我就可以用函数返回它的指针。在这个函数中,我还将整数(通过getpixel()函数)分配到这个数组中。我是这样做的:

int **tab;
tab = (int**)malloc((600) * sizeof(int));

for (int i = 0; i<600; i++)
{
    tab[i] = (int*)malloc((800) * sizeof(int*));
}


for (int i = 0; i<600; i++)
{
    for (int j = 0; j<800; j++)
    {
        tab[i][j] = getpixel(i, j);
    }
}

这个数组当然在大多数情况下工作,当我检查它时,它具有我期望的值。然而,当我到达更大的Y时,它停止工作。所以例如。当我想检查数组选项卡[799] [599]时,我不能,因为有关于异常的错误,我不能直接复制它,因为我有其他语言而不是英语版本,但它有点像的是:

“0x00E71C05 w bgi.exe中不支持的异常:0xC0000005:从0x0000095C位置读取时违反访问规则。”

我认为这意味着,mallock()没有为我保留记忆。但是我怎样才能让阵列足够大呢?或者这是其他任何问题吗?

1 个答案:

答案 0 :(得分:0)

你的malloc是错误的,它需要像:

var range : Range<Int>? {
    get {
        guard maxValue > minValue else { return nil }
        return Range<Int>(uncheckedBounds: (Int(minValue), Int(maxValue))) }
    set {
        if let value = newValue {
            minValue = Int32(value.lowerBound)
            maxValue = Int32(value.upperBound)
        }  else {
            minValue = 0
            maxValue = 0
        }
    }
}

如果您希望阵列为800x600。如果你想要它是600x800只需交换值。