我正在尝试创建一个分配一定指定大小的内存的函数。在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);
}
现在的问题是,当我试图释放内存时,它给了我一个错误。如果解决方案能提供一个简短的解释,我将不胜感激。我开始非常困惑这些指针和类型转换是如何工作的。提前感谢!
你的程序中有很多错误,我要指出来:
-
您需要
#define
宏SIZE
,否则程序将不知道它是什么 -
最好声明函数
allocate_memory()
的原型,以便检测参数类型或返回类型的任何差异 - 您已经将
&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");
}