C语言中的动态内存分配功能是通过函数库
在C语言中,动态内存分配的过程可以分为以下三个步骤:
-
申请内存空间:使用malloc()函数在堆区分配一块适当大小的内存空间。malloc()函数的函数原型为void *malloc(size_t size),其中参数size表示要分配的内存尺寸,单位是字节,函数返回值是一个指向void类型的指针,表示分配的内存的起始地址。如果分配成功,这个指针指向分配的内存起始地址,否则返回NULL。
-
使用内存空间:使用指向分配内存的指针,保存需要存储的数据。
-
释放内存空间:使用free()函数释放不再需要的内存空间,以便其他程序可以使用这些内存。函数原型为void free(void *ptr),其中参数ptr是需要释放的内存指针,如果ptr为NULL,则该函数无作用。
下面是两个具体的示例说明:
示例一
在堆区分配一个长度为10的int型数组,并对其中的每个元素进行赋值操作。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr; // 定义一个指向int型的指针变量
ptr = (int *)malloc(10 * sizeof(int)); // 申请10个int型的内存空间
if (ptr == NULL) {
printf("Memory allocation failure!\n");
return -1;
}
for (int i = 0; i < 10; i++) {
ptr[i] = i + 1; // 给每个元素赋值
printf("%d ", ptr[i]); // 打印每个元素的值
}
free(ptr); // 释放分配的内存空间
return 0;
}
该程序的输出为:1 2 3 4 5 6 7 8 9 10
示例二
在堆区分配一个2行3列的二维数组,并对其中的每个元素进行赋值操作。
#include <stdio.h>
#include <stdlib.h>
int main() {
int **ptr; // 定义一个指向指针的指针变量
ptr = (int **)malloc(2 * sizeof(int *)); // 申请2个指针型的内存空间
if (ptr == NULL) {
printf("Memory allocation failure!\n");
return -1;
}
for (int i = 0; i < 2; i++) {
ptr[i] = (int *)malloc(3 * sizeof(int)); // 申请3个int型的内存空间
if (ptr[i] == NULL) {
printf("Memory allocation failure!\n");
return -1;
}
for (int j = 0; j < 3; j++) {
ptr[i][j] = i * 3 + j + 1; // 给每个元素赋值
printf("%d ", ptr[i][j]); // 打印每个元素的值
}
printf("\n");
}
for (int i = 0; i < 2; i++) {
free(ptr[i]); // 释放分配的内存空间
}
free(ptr);
return 0;
}
该程序的输出为:
1 2 3
4 5 6
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中如何进行动态内存分配? - Python技术站