C ++ 2d数组运行时错误

时间:2015-03-18 18:12:38

标签: c++ arrays

做一些赋值,这是一个在动态分配的2D数组中计算负数的函数:

 void numberOfNegs(int** arrayPointer, int n) {
    int counter{ 0 };
    for (int i{ 0 }; i < n; i++){
        for (int j{ 0 }; j < n; j++){
            if (arrayPointer[i][j] < 0) {
                counter++;
            }
        }
    }

似乎对我来说是合法的,但是调试器会抛出这个错误:

  

* .exe中0x00C25D9A处的未处理异常:0xC0000005:Access   违规阅读地点0xCDCDCDCD。

请帮助

以下是关于我如何投放它的更多代码

    std::cin >> x;

int** theMatrix = new int*[x];
for (int i{ 0 }; i < x; i++){
    theMatrix[x] = new int[x];
}

std::cout << "Please enter a matrix " << x << std::endl;

for (int i{ 0 }; i < x; i++) {
    for (int j{ 0 }; j < x; j++) {
        std::cin >> theMatrix[x][x];
    }
}

 numberOfNegs(theMatrix, x)

1 个答案:

答案 0 :(得分:2)

您的初始化问题出在此处:

for (int i{ 0 }; i < x; i++){
    theMatrix[x] = new int[x];
}

您使用x作为数组索引,而您(可能)意味着i。您当前的代码只为最后一个元素x次创建一个数组。将其更改为:

for (int i{ 0 }; i < x; i++){
    theMatrix[i] = new int[x];
}

您可能还想调整此代码:

for (int i{ 0 }; i < x; i++) {
    for (int j{ 0 }; j < x; j++) {
        std::cin >> theMatrix[x][x];
    }
}

要:

for (int i{ 0 }; i < x; i++) {
    for (int j{ 0 }; j < x; j++) {
        std::cin >> theMatrix[i][j];
    }
}