欢迎访问宙启技术站
智能推送

C语言动态内存如何分配

发布时间:2023-05-14 17:45:16

动态内存分配是指程序在运行期间根据需要临时分配内存的一种方式。在C语言中,动态内存分配可以通过库函数malloc、calloc、realloc和free来实现。其中,malloc函数根据提供的字节数在堆中分配一块内存,并返回该内存块的起始地址;calloc函数在堆中分配一块内存,并初始化为0;realloc函数则可以调整已分配内存块的大小。

动态内存的分配和释放需要遵循以下步骤:

1. 使用malloc或calloc函数分配内存块,返回指向内存块起始地址的指针。

2. 对分配的内存进行操作,以存储所需的数据。

3. 使用realloc函数可以重新调整内存块的大小,该函数接受两个输入参数: 个是已经分配了的内存块指针,第二个是需要分配的新内存块大小。如果无法重分配,则返回NULL指针。

4. 在使用完内存后,需要使用free函数来释放该块内存。如果没有释放内存,程序可能会出现内存泄漏的问题。

以下是一个动态分配内存的示例程序:

#include <stdio.h> 
#include <stdlib.h> 

int main() {   
    int *num_ptr;   
    int num_elem = 5;    
    // 动态分配空间,大小为num_elem   
    num_ptr = (int*) malloc(num_elem * sizeof(int));   
    if (num_ptr == NULL) {       
        printf("Error: unable to allocate memory
");       
        exit(1);   
    }   
    // 向分配的空间中存储数据   
    for (int i = 0; i < num_elem; i++) {       
        num_ptr[i] = i + 1;   
    }   
    // 输出分配的空间的数据   
    for (int i = 0; i < num_elem; i++) {       
        printf("num_ptr[%d]: %d
", i, num_ptr[i]);   
    }    
    // 重分配空间到num_elem*2   
    num_ptr = (int*) realloc(num_ptr, num_elem * 2 * sizeof(int));    
    if (num_ptr == NULL) {       
        printf("Error: unable to allocate memory
");       
        exit(1);   
    }   
    // 输出重新分配空间后的数据   
    printf("After realloc:
");   
    for (int i = 0; i < num_elem*2; i++) {       
        printf("num_ptr[%d]: %d
", i, num_ptr[i]);   
    }   
    // 释放分配的空间   
    free(num_ptr);   
    return 0; 
} 

此示例演示了如何动态分配内存,并向其存储数据,最后释放内存。需要注意的是,在调用free函数之前,必须确保已经完成了对分配空间的所有操作。