3

我正在尝试创建一个分配特定大小内存的函数。在主程序中,我创建指针,然后将指针和大小发送给函数以分配内存。由于某种原因,它会导致各种问题。如果我在 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);
    }

现在的问题是当我尝试释放内存时它给了我一个错误。如果解决方案附有简短的解释,我将不胜感激。我开始对这些指针和铸件的工作方式感到非常困惑。提前致谢!

4

1 回答 1

2

我要指出您的程序中有很多错误:

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

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

  3. 您已&pointer作为参数传递给allocate_array()in main()。为此,有必要将函数定义为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");


    }
于 2013-04-27T08:19:13.753 回答