首页 > 解决方案 > 基本 C 内存分配

问题描述

#include <stdio.h>
#include <stdlib.h>

void allocateMem(int *a)
{
    a = (int*)malloc(5 * sizeof(int));
}

int main()
{
    int *ptr;
    allocateMem(ptr);
    ptr[0] = 5454;
    ptr[1] = 54;
    printf("Hi %d\n", ptr[1]);
    free(ptr);
    return 0;
}

我没有得到任何输出和代码错误。但是如果我在主函数中分配内存,它实际上是有效的。

标签: cmalloc

解决方案


C 函数参数按值传递。这意味着当您传递ptrallocateMem然后在 内修改它时allocateMem,您不会更改任何关于ptr.

正在创建内存泄漏,因为您无法释放动态分配的内存,因为您没有保留指向它的指针。

您希望函数在您调用的函数外部修改任何参数,您需要传递一个指针,因此如果您想修改一个指针,您需要将一个指针传递给一个指针,正如@babon 所展示的那样他们答案中的代码。


推荐阅读