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;
}