【问题标题】:Memory allocation in various functions?各种函数中的内存分配?
【发布时间】:2016-08-26 12:13:41
【问题描述】:

我正在创建两个不同的函数,这两个函数都需要使用指针。

所以我需要在输入指针值的函数中使用 malloc,然后能够在另一个函数中对分配的指针的值进行排序(这部分有时有效,但总是导致程序崩溃)。

如果我在我的主函数中使用 malloc,我可以轻松地在我的两个用户创建的函数中使用指针,但就像我提到的,我正在尝试在我创建的函数中使用 malloc,并使其工作在其他功能中。

所以我的问题是,这可能吗?此外,我不想在全球范围内进行 malloc(如果可能的话)。

【问题讨论】:

  • 请张贴代码?
  • 从分配内存的函数返回指针。
  • 如果我发布代码,只会更加混乱。这是一个有点大的程序并使用多个文件。一般来说,我的两个函数是 enterdata(pointer) 和 sort_data(pointer)。我需要在“enterdata”中使用 malloc,但确保程序在之后不会崩溃,我使用 sort_data。
  • then be able to sort the values of the allocated pointer in another function(That part sometimes work, but always causes the program to crash). ... 为什么要对分配的指针值进行排序?那是自找麻烦。如果您在函数中使用 malloc,请将 malloc 的值返回给函数调用者,以便第 3 方程序可以使用和释放您的函数分配的内存。
  • 您分配的不是“指针”,而是一个对象并获得该对象的地址。

标签: c pointers malloc


【解决方案1】:

没有代码,我帮不上什么忙,但是在具有malloc 的函数中,只需让该函数返回指针即可。您也可以让该函数获取指向指针的指针并像那样分配它。

方式 1

void* f1()
{
    return malloc(szData);
}

void f2(void* ptr)
{
    // do stuff with pointer
}

int main()
{
    void* ptr = NULL;
    ptr = f1();
    f2(ptr);
    free(ptr);
}

方式 2

void f1(void** ptr)
{
    *ptr = malloc(szData);
}

void f2(void* ptr)
{
    // do stuff with pointer
}

int main()
{
    void* ptr = NULL;
    f1(&ptr);
    f2(ptr);
    free(ptr);
}

有许多不同的方法可以做到这一点。我希望这两个例子足以解决你的问题。

【讨论】:

  • 你应该释放内存。
  • @GregM:让运行时释放您保留的资源是不好的编码风格。如果你分配内存,你应该free它。 (对于文件等也是如此)您不检查结果,并且使用指针参数返回一个值,尽管函数是 void 也是不好的风格。返回指针更加直接。最后,main 有一个劝阻签名。使用原型声明器。
  • @Olaf 这应该是一个简单的解释。用户问了一个问题,我回答了。如果您对我的回答不满意,请进行编辑,因为 cmets 可以更改。
  • @GregM:这是你的答案。编辑是为了纠正拼写或格式,而不是根本的“缺陷”。通过提供代码(不仅仅是更正它)来完成某人的作业的答案至少应该显示出良好的编码实践。 cmets 还要向读者添加说明和增强功能,我这样做了。
  • @Olaf 然后发布您自己的答案。没有什么不妥。和我争论会让你一事无成。
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 2016-07-29
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多