C语言malloc函数:动态内存分配 C语言中的 malloc 函数是一种动态内存分配函数,可以在程序运行时在堆上分配一段指定大小的内存空间,并返回指向该内存空间的指针。这个函数非常有用,特别是当我们需要创建动态数据结构时,例如链表和树等。 malloc 函数是 C语言标准库中的函数,其原型如下: void *malloc(size_t size); 函数原型中,参数 size 指定需要分配的内存空间大小,以字节为单位。该函数返回的是一个 void 类型的指针,即 void *。因为 malloc 函数返回的是一个 void 指针,所以需要将其转换为需要的指针类型,例如 int *、char * 等。 下面是一些使用 malloc 函数的示例: 1) 动态分配一维数组 #include <stdio.h> #include <stdlib.h> int main() { int n, i; printf(“请输入数组长度:”); scanf(“%d”, &n); int *arr = (int*)malloc(n * sizeof(int)); for (i = 0; i < n; i++) { arr[i] = i + 1; } for (i = 0; i < n; i++) { printf(“%d “, arr[i]); } free(arr); return 0; } 上面的代码中,我们首先从用户输入中读取数组的长度 n,然后使用 malloc 函数动态分配了一个长度为 n 的整型数组。接着,我们使用 for 循环给数组中的每个素赋值,并打印输出数组中的每个素。最后,我们使用 free 函数释放了这段内存空间。 这是程序的输出: 请输入数组长度:5 1 2 3 4 5 2) 动态分配二维数组 #include <stdio.h> #include <stdlib.h> int main() { int m, n, i, j; printf(“请输入二维数组的行数和列数:”); scanf(“%d%d”, &m, &n); int arr = (int)malloc(m * sizeof(int*)); for (i = 0; i < m; i++) { arr[i] = (int*)malloc(n * sizeof(int)); for (j = 0; j < n; j++) { arr[i][j] = i * n + j + 1; } } for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { printf(“%d “, arr[i][j]); } printf(” ”); free(arr[i]); } free(arr); return 0; } 上面的代码中,我们首先从用户输入中读取二维数组的行数 m 和列数 n,然后使用 malloc 函数动态分配了一个 m 行 n 列的整型数组。为了实现二维数组的动态分配,我们首先分配一个指针数组,其中每个素都指向一行的数组,然后在循环中为每行分配一个 n 个整型素的数组,并将该指针赋值给指针数组中的每个素。 接着,我们使用 for 循环给数组中的每个素赋值,并打印输出数组中的每个素。在输出完每行的素后,我们使用 free 函数释放了该行数组所占的内存空间。 这是程序的输出: 请输入二维数组的行数和列数:3 4 1 2 3 4 5 6 7 8 9 10 11 12 3) 动态分配结构体数组 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char name[20]; int age; } Person; int main() { int n, i; printf(“请输入人数:”); scanf(“%d”, &n); Person *people = (Person*)malloc(n * sizeof(Person)); for (i = 0; i < n; i++) { printf(“请输入第%d个人的姓名和年龄:”, i + 1); scanf(“%s%d”, people[i].name, &people[i].age); } for (i = 0; i < n; i++) { printf(“第%d个人的姓名为%s,年龄为%d ”, i + 1, people[i].name, people[i].age); } free(people); return 0; } 上面的代码中,我们首先从用户输入中读取人数 n,然后使用 malloc 函数动态分配了一个长度为 n 的 Person 结构体数组。接着,我们使用 for 循环依次输入每个人的姓名和年龄,并打印输出每个人的姓名和年龄。最后,我们使用 free 函数释放了这段内存空间。 这是程序的输出: 请输入人数:3 请输入第1个人的姓名和年龄:张三 20 请输入第2个人的姓名和年龄:李四 30 请输入第3个人的姓名和年龄:王五 40 第1个人的姓名为张三,年龄为20 第2个人的姓名为李四,年龄为30 第3个人的姓名为王五,年龄为40 4) 动态分配字符串 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n, i; printf(“请输入字符串的个数:”); scanf(“%d”, &n); char strs = (char)malloc(n * sizeof(char*)); for (i = 0; i < n; i++) { printf(“请输入第%d个字符串:”, i + 1); char buf[100]; scanf(“%s”, buf); strs[i] = (char*)malloc((strlen(buf) + 1) * sizeof(char)); strcpy(strs[i], buf); } for (i = 0; i < n; i++) { printf(“%s ”, strs[i]); free(strs[i]); } free(strs); return 0; } 上面的代码中,我们首先从用户输入中读取字符串的个数 n,然后使用 malloc 函数动态分配了一个长度为 n 的 char 指针数组。接着,我们使用 for 循环依次输入每个字符串,并使用 strlen 函数计算字符串长度,然后使用 malloc 函数动态分配一个足够大的 char 数组,再使用 strcpy 函数将输入的字符串拷贝到新分配的内存空间中。最后,我们使用 for 循环依次输出每个字符串,并使用 free 函数释放每个字符串所占的内存空间,最后使用 free 函数释放指针数组所占的内存空间。 这是程序的输出: 请输入字符串的个数:3 请输入第1个字符串:hello 请输入第2个字符串:world 请输入第3个字符串:c programming hello world c programming 5) 动态分配二维字符数组 #include <stdio.h> #include <stdlib.h> int main() { int n, m, i, j; printf(“请输入二维字符数组的行数和列数:”); scanf(“%d%d”, &n, &m); char matrix = (char)malloc(n * sizeof(char*)); for (i = 0; i < n; i++) { matrix[i] = (char*)malloc(m * sizeof(char)); printf(“请输入第%d行的%d个字符:”, i + 1, m); for (j = 0; j < m; j++) { scanf(” %c”, &matrix[i][j]); } } for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf(“%c “, matrix[i][j]); } printf(” ”); free(matrix[i]); } free(matrix); return 0; } 上面的代码中,我们首先从用户输入中读取二维字符数组的行数 n 和列数 m,然后使用 malloc 函数动态分配了一个长度为 n 的 char 指针数组。接着,我们使用 for 循环依次为每一行动态分配一个长度为 m 的 char 数组,并使用 for 循环依次输入每个字符。在每行字符输入完成后,我们使用 for 循环依次输出每个字符,并使用 free 函数释放每行所占的内存空间。最后,我们使用 free 函数释放指针数组所占的内存空间。 这是程序的输出: 请输入二维字符数组的行数和列数:3 4 请输入第1行的4个字符:a b c d 请输入第2行的4个字符:e f g h 请输入第3行的4个字符:i j k l a b c d e f g h i j k l 总结 以上是关于 C语言中 malloc 函数的使用及示例代码的介绍。malloc 函数是 C语言中用于动态分配内存空间的重要函数,能够帮助我们更加灵活地管理内存空间。当我们需要动态分配数组、结构体、字符串或者二维数组时,都可以使用 malloc 函数来实现。在使用 malloc 函数时,我们需要注意动态分配的内存空间的大小,以及在使用完毕后要及时释放内存空间,避免内存泄漏问题。 需要注意的是,使用 malloc 函数动态分配的内存空间不会自动初始化为 0。因此,在使用 malloc 函数动态分配内存空间后,我们需要根据实际情况手动初始化内存空间。另外,当我们使用 malloc 函数动态分配内存空间后,如果需要调整内存空间的大小,可以使用 realloc 函数来实现。 在使用 malloc 函数时,我们需要对 malloc 函数的返回值进行判断,以确保内存分配成功。如果 malloc 函数返回的指针为 NULL,说明内存分配失败,此时我们需要考虑如何处理内存分配失败的情况,比如输出错误信息并退出程序。 总之,malloc 函数是 C语言中非常重要的函数,熟练掌握 malloc 函数的使用可以帮助我们更加灵活地管理内存空间,提高程序的效率和稳定性。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/37313.html