我是 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;
}
谢谢。
我是 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;
}
谢谢。
在 C 中,有两种内存:
堆栈内存相当有限,用于函数中的自动变量、处理开销等。
当你需要更大的内存块时,你需要从heap
.
不是这个答案的完全重复,但这似乎是一个很好的描述:
使用 malloc() 函数的原因有很多。
malloc() 用于为变量动态分配内存。为什么?动态分配内存的原因有很多。例如,如果某个对象/变量的大小在编译时不知道,并且可能有理由稍后增加它,那么它需要增加内存需求。这就是 malloc 的用武之地。
malloc() 用于初始化 POINTERS 为什么?未初始化的指针指向随机位置。此位置可能无法访问,并可能使程序崩溃。当使用 malloc 时,它会增加堆存储并将随机初始化的指针指向一个可以读取/写入的“正常”位置。
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 动态内存分配