C语言动态内存的使用
时间: 2023-07-11 11:13:42 浏览: 52
C语言中,动态内存的分配和释放一般使用以下四个函数:
1. malloc(size_t size):在堆区分配一块指定大小的内存,返回该内存块的首地址。如果分配失败,则返回 NULL。
2. calloc(size_t num, size_t size):在堆区分配指定数量和大小的连续内存块,返回该内存块的首地址。分配的内存块大小为 num * size,函数会自动将内存块清零。如果分配失败,则返回 NULL。
3. realloc(void* ptr, size_t size):重新分配已经分配的内存块的大小。ptr 为原内存块的首地址,size 为新内存块的大小。如果新内存块的大小小于等于原内存块的大小,则原内存块会被截断。如果新内存块的大小大于原内存块的大小,则会在堆区重新分配一块新的内存块,并将原内存块中的数据复制到新内存块中。返回值为新内存块的首地址。如果分配失败,则返回 NULL。
4. free(void* ptr):释放由 malloc、calloc 或 realloc 函数分配的内存块。ptr 为待释放内存块的首地址。释放内存块后,该内存块的指针不再指向有效的内存空间,访问该内存块可能会导致程序崩溃。
下面是一个动态内存分配和释放的示例:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int* p;
p = (int*)malloc(sizeof(int)); // 在堆区分配一块 int 类型的内存
if (p == NULL) {
printf("Memory allocation failed!\n");
return -1;
}
*p = 100; // 将 p 指向的内存块赋值为 100
printf("*p = %d\n", *p);
free(p); // 释放 p 指向的内存块
return 0;
}
```
需要注意的是,在使用动态内存时,要特别注意内存泄漏和越界等问题。在分配内存后,要确保及时释放内存。在使用指针操作内存时,要确保不会越界,否则会导致程序崩溃或数据错误。