怎样使用malloc和free函数,输入n和n个整数,并且输出最大值,最小值
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, *arr;
int max, min;
// 输入n
printf("请输入n: ");
scanf("%d", &n);
// 动态分配n个整数大小的内存空间
arr = (int*) malloc(n * sizeof(int));
// 输入n个整数
printf("请输入%d个整数: ", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 初始化max和min
max = min = arr[0];
// 查找最大值和最小值
for (i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
// 输出最大值和最小值
printf("最大值为:%d\n", max);
printf("最小值为:%d\n", min);
// 释放内存空间
free(arr);
return 0;
}
C语言提供了一个动态内存开辟的函数:
void* malloc (size_t size);
这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。
举个例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
//申请空间
int* p = (int*) malloc(40);
if (p == NULL)
{
return -1;
}
//开辟成功了
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
printf("%d ", *(p + i));
}
return 0;
}
C语言提供了另外一个函数free,是专门用来做动态内存的释放和回收的:
void free (void* ptr);
free函数用来释放动态开辟的内存。
举个例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
//申请空间
int* p = (int*) malloc(40);
if (p == NULL)
{
return -1;
}
//开辟成功了
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
printf("%d ", *(p + i));
}
//释放空间
free(p);
p = NULL;
return 0;
}
注明:malloc() 和 free() 的头文件都是 #include <stdlib.h> 千万别忘了哦~
解决方案:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, max, min;
int *data;
printf("请输入数的个数:\n");
scanf("%d", &n);
data = (int *)malloc(n * sizeof(int)); // 申请连续内存块
if (data == NULL) { // 判断内存是否申请成功
printf("内存申请失败!\n");
exit(1); // 退出程序
}
printf("请输入数:\n");
for (i = 0; i < n; i++) {
scanf("%d", &data[i]);
}
max = data[0]; // 假设第一个数为最大值
min = data[0]; // 假设第一个数为最小值
for (i = 1; i < n; i++) { // 遍历寻找其他数中的最值
if (data[i] > max) {
max = data[i];
}
if (data[i] < min) {
min = data[i];
}
}
printf("最大值:%d,最小值:%d\n", max, min);
free(data); // 释放内存
data = NULL; // 指针设置为空,防止野指针
return 0;
}
解决思路: 1. 首先需要使用 malloc 函数动态申请连续内存块,由于需要输入 n 个整数,需要申请 n 个 int 类型的内存空间,所以 malloc 的参数应为 n * sizeof(int)。 2. 判断内存申请是否成功,如果申请失败,记录错误信息并退出程序。 3. 输入 n 个整数并存放到申请的内存空间中。 4. 假设第一个数为最大值和最小值,遍历其他数,如果找到更大或更小的数,则更新最大值或最小值。 5. 输出最大值和最小值。 6. 释放申请的内存,并将指针设置为空,防止野指针。