我正在尝试创建一个分配特定大小内存的函数。总的来说,我创建了指针,然后将指针和大小发送到要分配内存的函数。由于某种原因,它会导致各种问题。如果我在 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);
}
现在的问题是当我试图释放内存时它给我一个错误。 如果解决方案附带简短说明,我将不胜感激。我开始对这些指针和转换是如何工作的感到非常困惑。 提前致谢!
最佳答案
我指出了您的程序中的许多错误:
您需要
#define
宏SIZE
,否则程序将不知道它是什么。最好声明函数
allocate_memory()
的原型(prototype),以便检测参数类型或返回类型的任何差异- 您已将
&pointer
作为参数传递给main()
中的allocate_array()
。为此,有必要将函数定义为allocate_memory(int **pointer,int size)
而不是您已经完成的allocate_memory(int *pointer,int size)
。 if(*pointer==NULL)
以更简单的方式实现条件,并且只用于相同的目的。- 使用
exit(1)
表示不成功终止,因为exit(0)
用于表示成功终止。 - 永远不要忽视警告。这不是一个好习惯。
这是更正后的代码。它在没有警告的情况下编译良好,并按预期完成工作(内存分配)。
#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");
}
关于c - malloc 未使用指向指针的指针正确分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16249740/