0

我是 C 语言的新手,我需要创建一个队列,如果我需要使用 malloc(内存分配)以及如何使用它,我不需要。我在没有 malloc 的情况下运行了 add、remove、size 和 isempty 并且它有效。

    void e1_init(e1queue_t* q){
    q->head = 0;
    q->tail = sizeof(q->queue)/sizeof(int)-1;
    q->size=0;  
    }

谢谢。

4

3 回答 3

1

在 C 中,有两种内存:

  • 堆栈

堆栈内存相当有限,用于函数中的自动变量、处理开销等。

当你需要更大的内存块时,你需要从heap.

不是这个答案的完全重复,但这似乎是一个很好的描述:

堆栈和堆是什么以及在哪里?

于 2012-10-20T07:13:53.533 回答
0

使用 malloc() 函数的原因有很多。

  1. malloc() 用于为变量动态分配内存。为什么?动态分配内存的原因有很多。例如,如果某个对象/变量的大小在编译时不知道,并且可能有理由稍后增加它,那么它需要增加内存需求。这就是 malloc 的用武之地。

  2. malloc() 用于初始化 POINTERS 为什么?未初始化的指针指向随机位置。此位置可能无法访问,并可能使程序崩溃。当使用 malloc 时,它会增加堆存储并将随机初始化的指针指向一个可以读取/写入的“正常”位置。

  3. 此外,使用 malloc 初始化的指针可以使用 realloc() 方法调整大小。这使得内存管理灵活(也容易出错)
于 2012-10-20T07:24:33.680 回答
0

C动态内存分配是指在C编程语言中通过C标准库中的一组函数进行动态内存分配,即malloc、realloc、calloc和free

句法:

#include <stdlib.h> 

描述:

该函数malloc()返回一个指向大小为大小的内存块的指针,如果有错误,则返回 NULL。指向的内存将位于堆上,而不是堆栈上,因此请确保在完成后释放它。

例子:

typedef struct data_type {
  int age;
  char name[20];
} data;

data *bob;
bob = (data*) malloc( sizeof(data) );
if( bob != NULL ) {
  bob->age = 22;
  strcpy( bob->name, "Robert" );
  printf( "%s is %d years old\n", bob->name, bob->age );
}
free( bob ); 

Good Read C 动态内存分配

于 2012-10-20T07:09:26.410 回答