【问题标题】:using malloc in main but accessing outside main在 main 中使用 malloc 但在 main 之外访问
【发布时间】:2015-06-08 11:14:14
【问题描述】:

有没有办法在“main”函数中使用动态内存定义“缓冲区”,但在另一个函数中在“main”之外使用它 IE。 我有一个数组,我通过“main”中的“malloc”将内存分配给“buffer”,如下所示

int main()
{
uint32_t *buffer = malloc( array_size * sizeof *buffer);


} 

但我必须在 main 之外初始化值

void fun(uint32_t data)
{
buffer[0] = data;
...

}

在我的案例中,数据实际上是在运行时来自相机

我也尝试在全局范围内使用“malloc”,但没有成功

【问题讨论】:

  • 您只需将指针作为参数传递给此函数。
  • 将 *buffer 传递给函数并形成该函数尝试修改它。它会起作用的。在全局空间中使用 malloc 时遇到什么错误?
  • 请认真思考你的问题(没有标点符号是不好的迹象),我看不懂。
  • 你在混用东西。你没有定义malloc,你定义了buffer。函数malloc 已经为你定义好了。
  • 我收到错误消息“初始化元素不是编译时常量”@Nihar

标签: c arrays scope malloc


【解决方案1】:

简单天真的方式:

uint32_t *buffer;

void fun(uint32_t data)
{
    buffer[0] = data;
    ...

}

int main()
{
    buffer = malloc( array_size * sizeof *buffer);
} 

【讨论】:

    【解决方案2】:

    你可以定义一个全局的uint32_t点,比如uint32_t *buffer1,然后让buffer1=buffer在main中,在其他函数中使用buffer1

    【讨论】:

      【解决方案3】:

      将该变量作为参数传递给函数。

      这样,

      void fun(uint32_t data,uint32_t* buffer){ 
       // do your work
      }
      

      包括头文件stdlib.h。像这样声明该函数的原型。

      void fun(uint32_t,uint32_t*);
      

      【讨论】:

        【解决方案4】:

        创建 fun 函数所属的类。让该类使用类方法填充缓冲区。然后在 main 中创建该类的实例。让该实例完成工作,然后将其删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-04
          • 2021-09-21
          • 1970-01-01
          • 2017-05-17
          • 1970-01-01
          • 1970-01-01
          • 2012-12-27
          • 1970-01-01
          相关资源
          最近更新 更多