C ++返回数组

时间:2018-08-13 14:21:47

标签: c++ arrays pointers

我正在尝试把注意力集中在C ++中的数组和指针上。

我正在尝试编写一个为变量大小为int的数组分配内存的函数。然后用随机数填充数组并返回。

我遇到的问题是使用指针分配值。

这是功能:

int* getArray(int length) {
    int* values = new int[length];
    for (int i=0; i<length; i++) {
        values[i]=i;
    }
    return values;
}

它工作正常。

但是,如果我将其更改为此:

int* getArray(int length) {
    int* values = new int[length];
    for (int i=0; i<length; i++, values ++) {
        *values=i;
    }
    return values;
}

它不起作用。

有人可以向我解释为什么我不能这样做吗?

这是我用来打印所有值的main方法:

int main() {
    int* v = getArray(100);
    for(int i=0;i<100;i++, v++) {
        cout << *v <<endl;
    }
    delete[] v;
    return 0;
}

我认为这是因为new运算符在堆中而不是在栈中分配新的内存,因此指针实际上可能指向错误的方向。

但是,如果是这样,main方法为何起作用?

侧面说明:我没有得到任何警告或错误,但是输出只是一堆零和一些随机数。

我在Ubuntu上使用GCC编译器。

1 个答案:

答案 0 :(得分:2)

values++正在修改values,最终形成了函数的返回值。

即您在分配的数组末尾返回一个。这本身就是完全合法的C ++。

但是在函数调用站点发生的事情非常严重:访问数组的无效元素(非正式地讲是“随机数”),并且在该元素上调用delete[]也是未定义的行为。 轰!