
#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 );总结
以上是内存溢出为你收集整理的如何将指针传递给函数并在函数C中动态分配内存全部内容,希望文章能够帮你解决如何将指针传递给函数并在函数C中动态分配内存所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)