导致故障的是什么?

时间:2015-09-12 20:37:56

标签: debugging visual-c++

问题超出数据限制是否超出范围异常?

int initfunc(int *array, int len) {
    int i;
    for (i = 1; i <= len; i++) {
        array[i] = i;
    }
    return 0;
}

int main(int argc, char* argv[]) {

    int*  myarray = 0;
    initfunc(myarray, 10);
}

2 个答案:

答案 0 :(得分:0)

int initfunc(int *array, int len) {
    int i;
    for (i = 1; i <= len; i++) {
        array[i] = i;
    }
    return 0;
}

int main(int argc, char* argv[]) {

    int*  myarray = 0;
    initfunc(myarray, 10);
}

您永远不会在main中声明数组的大小。您需要静态或动态地分配大小。你现在有一个指向什么都没有的int指针。然后将指针传入并尝试使用以下方法访问它:

array[i] = i;

这是工作代码

int initfunc(int *array, int len) {

    array = new int[len];

    for (int i = 1; i <= len; i++) {
        array[i] = i;
    }
    return 0;
}

int main(int argc, char* argv[]) {

    int*  myarray = 0;
    initfunc(myarray, 10);
}

答案 1 :(得分:0)

您提供的代码存在两个问题。

第一个问题是你实际上没有为myarray分配任何内存。您刚刚创建了一个指针,当前指向NULL

创建静态数组

int myarray[10];

或动态

int *myarray = new int[10];

第二个问题是你很可能在for循环中访问array的范围之外。由于数组索引为零,因此您需要检查i < len而不是i <= len