C++ 返回数组

标签 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 编译器。

最佳答案

values++就是修改values,最终形成函数返回值。

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

但是在函数调用处出现了非常严重的错误:您访问了数组的无效元素(非正式地说是您的“随机数”),然后调用 delete[]也是未定义的行为。 轰!

关于C++ 返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51824570/

相关文章:

c++ - 64 位地址

c++ - ComPtr 与 CComPtr,As 与 QueryInterface

arrays - 在 R 中排列 3 维列联表以运行 Cochran-Mantel-Haenszel 分析?

php - 将数组附加到多维数组,保留键

c - 无法将结构指针分配给内存数组

c++ - 基类指针和段错误

c++ - C++中双变量/计算的小数点后的数字

javascript - 根据数组对象的属性值获取资格

c - 查看用户输入以查看它是否是 float 的,总是返回 true

指针和整数之间的比较