gpt4 book ai didi

c - malloc 未使用指向指针的指针正确分配

转载 作者:行者123 更新时间:2023-12-04 11:53:46 25 4
gpt4 key购买 nike

我正在尝试创建一个分配特定大小内存的函数。总的来说,我创建了指针,然后将指针和大小发送到要分配内存的函数。由于某种原因,它会导致各种问题。如果我在 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() 的原型(prototype),以便检测参数类型或返回类型的任何差异

  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");


}

关于c - malloc 未使用指向指针的指针正确分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16249740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com