C - malloc不能正确分配指针到指针



我正在尝试创建一个分配一定指定大小的内存的函数。在main中,我创建指针,然后将指针和大小发送给要分配内存的函数。出于某种原因,它会引起各种各样的问题。如果我在main中使用malloc,而不是通过函数,我的程序可以顺利运行。

int main(void){
    int * pointer;
    int array_size = SIZE;
    ...
    allocate_memory(&pointer,array_size);
    ...
    free(pointer);
}
allocate_memory(int *pointer,int size){
    *pointer = (int *)malloc(size*sizeof(int));
    if(!(*pointer)){
        printf("Memory allocation fail!");
        exit(0);
    }

现在的问题是,当我试图释放内存时,它给了我一个错误。如果解决方案能提供一个简短的解释,我将不胜感激。我开始非常困惑这些指针和类型转换是如何工作的。提前感谢!

你的程序中有很多错误,我要指出来:

  1. 您需要#defineSIZE,否则程序将不知道它是什么

  2. 最好声明函数allocate_memory()的原型,以便检测参数类型或返回类型的任何差异

  3. 您已经将&pointer作为参数传递给main()中的allocate_array()。为此,有必要将函数定义为allocate_memory(int **pointer,int size)而不是您所做的allocate_memory(int *pointer,int size)
  4. if(*pointer==NULL)以一种更简单的方式实现了这个条件,并且达到了同样的目的。
  5. 使用exit(1)表示不成功,使用exit(0)表示成功。
  6. 永远不要忽视警告。这不是一个好的做法。

这是更正后的代码。它编译得很好,没有警告,并按预期完成任务(内存分配)。

    #include<stdio.h>
    #include<stdlib.h>
    #define SIZE 30
    void allocate_memory(int**,int);
    int main(void){
        int * pointer;
        int array_size = SIZE;
        allocate_memory(&pointer,array_size);
        free(pointer);
    }
    void allocate_memory(int **pointer,int size)
    {
        *pointer = malloc(size*sizeof(int));
        if(*pointer==NULL)
        {
            printf("Memory allocation fail!");
            exit(1);
        }
        else
            printf("nMemory allocation successful");

    }

相关内容

  • 没有找到相关文章

最新更新