malloc未使用指针对指针正确分配
我试图创建一个函数来分配特定大小的内存。在main中,我创建了指针,然后将指针和大小发送给要分配内存的函数。出于某种原因,它导致了各种各样的问题。如果我在main中使用malloc,但不是通过函数,那么我的程序工作得很顺利malloc未使用指针对指针正确分配,c,pointers,casting,malloc,free,C,Pointers,Casting,Malloc,Free,我试图创建一个函数来分配特定大小的内存。在main中,我创建了指针,然后将指针和大小发送给要分配内存的函数。出于某种原因,它导致了各种各样的问题。如果我在main中使用malloc,但不是通过函数,那么我的程序工作得很顺利 int main(void){ int * pointer; int array_size = SIZE; ... allocate_memory(&pointer,array_size); ... free(point
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);
}
现在的问题是,当我试图释放内存时,它会给我一个错误。
如果能给出一个简短的解释,我将不胜感激。我开始对这些指针和铸件是如何工作的感到非常困惑。
提前谢谢 您的程序中有许多错误,我要指出:
allocate\u memory()
,以便检测参数类型或返回类型中的任何差异main()
中将&pointer
作为参数传递给allocate\u array()
。为此,需要将函数定义为allocate\u memory(int**pointer,int size)
而不是您所做的allocate\u 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");
}
#包括
#包括
#定义尺寸30
无效分配内存(int**,int);
内部主(空){
int*指针;
int数组_size=大小;
分配内存(&指针、数组大小);
自由(指针);
}
无效分配内存(整数**指针,整数大小)
{
*指针=malloc(大小*sizeof(int));
如果(*指针==NULL)
{
printf(“内存分配失败!”);
出口(1);
}
其他的
printf(“\n内存分配成功”);
}
谢谢您的回答。我是这个论坛的新手,因此我愚蠢地认为我不必将原型添加到我提供的代码中。在我的代码中,这些原型确实存在。我只是假设人们会把它们当作是给定的来解释。@AYR欢迎来到StackOverflow。这里的人们喜欢好的、真诚的问题,即使是初学者提出的问题。@SheerFish-1,造成内存泄漏不是好的,你还导致了空闲(指针)
的未定义行为。请记住,在C语言中,变量是通过值传递的。你缺乏C语言的基本知识。我只是想帮助你,如果你不同意,我们可以开始聊天,我会很高兴地解释。@SheerFish再次用printf清楚地显示主指针的代码没有更改。让我们拿起任何一本标准书。整个指向指针的指针
和指向变量的指针
都用图形、数字和基本代码进行了很好的解释。