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

标签 c++ pointers pass-by-reference pass-by-value function-definition

我正在尝试声明一个指针并将该指针传递给分配内存的函数。这是一个最小的例子:

#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++ 中动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23156999/

相关文章:

r - R 中的修改时复制语义到底是什么?规范来源在哪里?

C++ `std::sort` 在不复制的情况下指向二维数据的指针

c++ - std::aligned_storage 的目的是什么?

c - 双向链表: Incompatible pointer types

c - 防止c中字符串溢出

ios - SplitViewController引用逻辑

c++ - 将 C++ 库添加到 Eclipse C++ 项目

c++ - rbegin 和 rend() 在这个函数中做了什么?

c++ - 如何在 C++ 中声明指向常量指针的指针?

c++ - std::string 如何管理这个技巧?