如何将指针传递给函数并在函数C中动态分配内存

如何将指针传递给函数并在函数C中动态分配内存,第1张

概述我正在尝试声明一个指针并将该指针传递给分配内存的函数.这是一个最小的例子: #include <string>#include <iostream>using namespace std;void alloc_mem(int &size, double *x);int main(){ double *X; int imax; al 我正在尝试声明一个指针并将该指针传递给分配内存的函数.这是一个最小的例子:

#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中动态分配内存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1222428.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存