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

詹姆士

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

#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 );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

释放C中动态分配的内存

来自分类Dev

在C中动态分配内存

来自分类Dev

在C中的函数内动态分配函数中的内存

来自分类Dev

如何在函数中动态分配内存?

来自分类Dev

在本地函数中动态分配和释放内存

来自分类Dev

如何将参数传递给C中的函数指针?

来自分类Dev

在C ++中为联合中的数组动态分配内存

来自分类Dev

如何避免动态分配的小部件中的内存泄漏

来自分类Dev

动态分配的内存必须在C ++中删除吗?

来自分类Dev

使用malloc在C中动态分配内存

来自分类Dev

在 C++ 中释放动态分配的内存的问题

来自分类Dev

在 C++ 中销毁动态分配的内存(数组对象)

来自分类Dev

动态分配的内存构造函数

来自分类Dev

动态分配和结构-将内存动态分配给结构中的字符串

来自分类Dev

C ++删除问题动态分配的内存

来自分类Dev

将内存锁定到C中的物理RAM中以动态分配指针

来自分类Dev

如何将函数中使用的数组传递给动态分配的main数组?

来自分类Dev

将输入获取到动态分配的内存中,然后返回指针

来自分类Dev

QList clear函数调用是否清除存储在QList中的动态分配对象的内存?

来自分类Dev

如何将指向“ DEFINED”常量的指针传递给C中的函数?

来自分类Dev

如何将500个指针的一维数组传递给C中的函数

来自分类Dev

C编程:从文件读取数据,动态分配内存,将内容放置在struct数组中

来自分类Dev

在pascal中动态分配匿名函数

来自分类Dev

如何在Visual Studio 2012 Visual C ++中动态分配内存

来自分类Dev

如何在C ++中为char数组动态分配内存?

来自分类Dev

如何在Visual Studio 2012 Visual C ++中动态分配内存

来自分类Dev

如何在C中为字符串数组动态分配内存?

来自分类Dev

如何动态计算动态分配的内存的大小

来自分类Dev

动态分配共享内存以用于数据数组和CUDA中的数据指针

Related 相关文章

  1. 1

    释放C中动态分配的内存

  2. 2

    在C中动态分配内存

  3. 3

    在C中的函数内动态分配函数中的内存

  4. 4

    如何在函数中动态分配内存?

  5. 5

    在本地函数中动态分配和释放内存

  6. 6

    如何将参数传递给C中的函数指针?

  7. 7

    在C ++中为联合中的数组动态分配内存

  8. 8

    如何避免动态分配的小部件中的内存泄漏

  9. 9

    动态分配的内存必须在C ++中删除吗?

  10. 10

    使用malloc在C中动态分配内存

  11. 11

    在 C++ 中释放动态分配的内存的问题

  12. 12

    在 C++ 中销毁动态分配的内存(数组对象)

  13. 13

    动态分配的内存构造函数

  14. 14

    动态分配和结构-将内存动态分配给结构中的字符串

  15. 15

    C ++删除问题动态分配的内存

  16. 16

    将内存锁定到C中的物理RAM中以动态分配指针

  17. 17

    如何将函数中使用的数组传递给动态分配的main数组?

  18. 18

    将输入获取到动态分配的内存中,然后返回指针

  19. 19

    QList clear函数调用是否清除存储在QList中的动态分配对象的内存?

  20. 20

    如何将指向“ DEFINED”常量的指针传递给C中的函数?

  21. 21

    如何将500个指针的一维数组传递给C中的函数

  22. 22

    C编程:从文件读取数据,动态分配内存,将内容放置在struct数组中

  23. 23

    在pascal中动态分配匿名函数

  24. 24

    如何在Visual Studio 2012 Visual C ++中动态分配内存

  25. 25

    如何在C ++中为char数组动态分配内存?

  26. 26

    如何在Visual Studio 2012 Visual C ++中动态分配内存

  27. 27

    如何在C中为字符串数组动态分配内存?

  28. 28

    如何动态计算动态分配的内存的大小

  29. 29

    动态分配共享内存以用于数据数组和CUDA中的数据指针

热门标签

归档