网站可信度必须做吗,网络营销与策划是什么,免费seo,个人网站开发 服务器1 malloc函数
函数说明#xff1a;
#include stdlib.hvoid *malloc(size_t size);
功能#xff1a;在内存的动态存储区(堆区)中分配一块长度为size字节的连续区域#xff0c;用来存放类型说明符指定的类型。分配的内存空间内容不确定。
参数#xff1a;size…1 malloc函数
函数说明
#include stdlib.hvoid *malloc(size_t size);
功能在内存的动态存储区(堆区)中分配一块长度为size字节的连续区域用来存放类型说明符指定的类型。分配的内存空间内容不确定。
参数size需要分配内存大小(单位字节)
返回值成功分配空间的起始地址失败NULL
代码示例
#include stdio.h
#include stdlib.h int main() { // 使用 malloc() 分配内存来存储 5 个整数 int *array (int *)malloc(5 * sizeof(int)); // 检查 malloc() 是否成功分配了内存 if (array NULL) { printf(内存分配失败\n); return -1; // 返回非零值表示错误 } // 初始化分配的内存中的整数 for (int i 0; i 5; i) { array[i] i 1; } // 打印整数的值 printf(数组中各元素分别是:\n); for (int i 0; i 5; i) { printf(%d , array[i]); } printf(\n); // 释放分配的内存 free(array); // 尝试访问已释放的内存可能会导致问题所以不再使用 array 指针 // 将指针设置为 NULL 以避免悬挂指针 array NULL; return 0;
}
2 calloc函数
函数说明
#include stdlib.hvoid *calloc(size_t num, size_t size);
功能该函数与malloc()类似但它还需要一个额外的参数来表示要分配的元素数量。它会返回一个指向已初始化为零的内存块的指针。
参数num指定要分配的元素数量。size指定每个元素的大小。
返回值成功分配的内存块的指针失败NULL
代码示例
#include stdio.h
#include stdlib.h int main() { // 使用 calloc() 分配内存来存储 10 个整数并初始化为 0 int *array (int *)calloc(10, sizeof(int)); // 检查 calloc() 是否成功分配了内存 if (array NULL) { printf(内存分配失败\n); return -1; } // 给数组中的每个元素赋一个值 for (int i 0; i 10; i) { array[i] i * 2; } // 打印数组中的值 printf(数组各个元素值分别是:\n); for (i 0; i 10; i){ printf(%d , array[i]); } printf(\n); // 释放分配的内存 free(array); // 将指针设置为 NULL避免悬挂指针 array NULL; return 0;
}
3 realloc()函数
函数说明
#include stdlib.hvoid *realloc(void *ptr, size_t new_size);
功能用于调整之前分配的内存块的大小。如果调整成功它会返回指向新内存块的指针如果失败它会返回NULL。
参数ptr指向一个之前由malloc(), calloc(), 或 realloc() 函数分配的内存块的指针。如果 ptr 是 NULL那么 realloc() 的行为就如同 malloc()分配一块大小为 new_size 的新内存。new_size重新分配的内存块的大小以字节为单位。
返回值如果内存重新分配成功realloc() 返回指向新内存块的指针。这个指针可能与 ptr 相同如果重新分配发生在原地也可能不同如果内存块移动了位置。如果内存重新分配失败realloc() 返回 NULL并且原内存块 ptr 保持不变不会被自动释放。
代码示例
#include stdio.h
#include stdlib.h int main() { int *array (int *)malloc(5 * sizeof(int)); if (array NULL) { perror(Memory allocation failed); return 1; } // 初始化数组 for (int i 0; i 5; i) { array[i] i; } // 打印原始数组 printf(Original array:\n); for (int i 0; i 5; i) { printf(%d , array[i]); } printf(\n); // 尝试将数组大小增加到10 int *new_array (int *)realloc(array, 10 * sizeof(int)); if (new_array NULL) { printf(内存重新分配失败\n); // 释放原始内存 free(array); return 1; } // 更新指针 array new_array; // 初始化新分配的内存部分 for (int i 5; i 10; i) { array[i] i; } // 打印新数组 printf(扩展后的数组:\n); for (int i 0; i 10; i) { printf(%d , array[i]); } printf(\n); // 释放内存 free(array); // 将指针设置为 NULL避免悬挂指针 array NULL; return 0;
}
4 free函数
函数说明
#include stdlib.h
void free(void *ptr);
功能释放ptr所指向的一块内存空间ptr是一个任意类型的指针变量指向被释放区域的首地址。对同一内存空间多次释放会出错。
参数ptr需要释放空间的首地址被释放区应是由malloc函数所分配的区域。
返回值无
代码示例
#include stdlib.h
#include stdio.hint main() {int n 0;printf(请输入要申请数组的个数: );scanf(%d, n);// 堆区申请 n * sizeof(int) 空间等价int arr[n]int *arr (int *)malloc(n * sizeof(int));if (arr NULL) {printf(申请空间失败!\n);return -1;}for (int i 0; i n; i){// 给数组赋值arr[i] i;}for (int i 0; i n; i) {// 输出数组每个元素的值printf(%d, , *(arri));}// 释放堆区空间free(arr);// 将指针设置为 NULL避免悬挂指针 array NULL; return 0;
}