Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;返回数组 我试图把我的注意力放在C++中的数组和指针上。_C++_Arrays_Pointers - Fatal编程技术网

C++;返回数组 我试图把我的注意力放在C++中的数组和指针上。

C++;返回数组 我试图把我的注意力放在C++中的数组和指针上。,c++,arrays,pointers,C++,Arrays,Pointers,我试图编写一个函数,为大小可变的int数组分配内存。然后用随机数填充数组并返回 我遇到的问题是用指针赋值 这就是功能: int* getArray(int length) { int* values = new int[length]; for (int i=0; i<length; i++) { values[i]=i; } return values; } 我认为这是因为new操作符在堆中而不是堆栈中分配新内存,所以指针实际上可能指向错

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

我遇到的问题是用指针赋值

这就是功能:

int* getArray(int length) {
    int* values = new int[length];
    for (int i=0; i<length; i++) {
        values[i]=i;
    }
    return values;
}
我认为这是因为
new
操作符在堆中而不是堆栈中分配新内存,所以指针实际上可能指向错误的方向

但是,如果这是真的,为什么
main
方法会起作用

旁注:我没有收到任何警告或错误,但输出只是一堆零和一些随机数


我正在Ubuntu上使用GCC编译器

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

i、 e.在分配的数组末尾返回一个。这本身就是完全合法的C++。
但是函数调用站点的情况非常糟糕:您访问数组中的无效元素(非正式地说是您的“随机数”),并且调用
delete[]
,这也是未定义的行为

数组由指向其第一个元素的指针表示。在第二个示例中,您没有返回指向第一个元素的指针。一旦您弄明白了问题所在,请抛开所学内容,改用
std::vector
,然后所有这些问题都会消失。要清楚,您
delete[]
的指针值必须与
new[]
返回的值完全相同,或未定义的行为结果。不管是指向终点还是指向第二个元素,砰!
int* getArray(int length) {
    int* values = new int[length];
    for (int i=0; i<length; i++, values ++) {
        *values=i;
    }
    return values;
}
int main() {
    int* v = getArray(100);
    for(int i=0;i<100;i++, v++) {
        cout << *v <<endl;
    }
    delete[] v;
    return 0;
}