如何将指针传递给函数并在函数C中动态分配内存
发布时间:2020-12-16 10:44:11 所属栏目:百科 来源:网络整理
导读:我正在尝试声明一个指针并将该指针传递给分配内存的函数.这是一个最小的例子: #include string#include iostreamusing namespace std;void alloc_mem(int size,double *x);int main(){ double *X; int imax; alloc_mem(imax,X); cout "imax = " imax endl;
我正在尝试声明一个指针并将该指针传递给分配内存的函数.这是一个最小的例子:
#include <string> #include <iostream> using namespace std; void alloc_mem(int &size,double *x); int main() { double *X; int imax; alloc_mem(imax,X); cout << "imax = " << imax << endl; for (int i = 0; i < imax; i++) { cout << "X = " << X[i] << endl; } delete[]X; return 0; } void alloc_mem(int &size,double *x) { size = 10; x = new double[size]; for (int i = 0; i < size; i++) { x[i] = (double)i; } } 这段代码编译,但是当我尝试打印出X的值时,我遇到了分段错误.我知道我没有正确地将变量传递给函数,但我不知道该怎么做.我相信我正在使用x的副本. 此外,编写此代码是为了重现我在更大的代码中遇到的问题. 解决方法
参数double * x是函数alloc_mem的局部变量.当函数结束执行时,变量将被销毁. main中的原始变量X不知道对此参数执行了什么操作,因为它是通过值传递的,该值是函数中使用的副本.
通过指针或引用传递指针.例如 void alloc_mem(int &size,double **x); void alloc_mem(int &size,double * &x); void alloc_mem(int &size,double **x) { size = 10; *x = new double [size]; for ( int i = 0; i < size; i++ ) ( *x )[i] = i; } void alloc_mem(int &size,double * &x) { size = 10; x = new double [size]; for ( int i = 0; i < size; i++ ) x[i] = i; } 至于我,我会按以下方式定义函数 double * alloc_mem( int &size ) { size = 10; x = new double [size]; for ( int i = 0; i < size; i++ ) x[i] = i; return x; } 如果在调用函数之前已知大小,那么它可以写得更简单 double * alloc_mem( int size ) { x = new double [size]; for ( int i = 0; i < size; i++ ) x[i] = i; return x; } 考虑到这个循环 for ( int i = 0; i < size; i++ ) x[i] = i; 可以替代标准算法std :: iota例如 std::iota( x,x + size,0.0 ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |