c语言指针动态内存--malloc

malloc

用于动态分配内存的函数,包含在stdlib.h的头文件中,作用是从堆(heap)中分配一块指定大小的内存空间,并且返回该内存空间的地址

使得程序能够更具需要,动态地获取内存,而无需在编写代码时预先知道所需内存地大小

原型:

void* malloc(size_t size);

对原型进行解析:

void* 首地址返回void*,意味着我们可以将其转换为任何类型
size_t 是类型
size是内存块大小

int* p = (int*)malloc(sizeof(int)*10);

在堆上分配一个足够大的内存块,以存储10个 int 类型的元素,并将一个指向这块内存的 int* 类型指针赋给变量 p。这样,p 就可以被当作一个包含10个整数的数组来使用。
最后一个*的意思是乘号

使用malloc函数动态分配内存的一般步骤:

1.调用malloc函数,传入所需的内存大小作为参数
2.检查返回值是否为NULL,以确保内存分配成功
3.使用返回的指针进行内存操作,例如存储数据或者传递给其他函数使用
4.在不在需要这块内存时,使用free函数释放内存,避免内存泄露

注意事项:

malloc分配的内存在程序结束前不会自动释放,因此需要程序员手动管理内存的分配和释放,否则会导致内存泄露
在实际使用中,通常会结合sizeof操作符来计算需要分配的内存大小,以确保分配的空间足够容纳特定类型的数据

#include<stdio.h>
#include<stdlib.h>
//malloc(sizeof(int) * 10);//申请地址
int main()
{
	int* p1 = (int*)malloc(sizeof(int) * 10);//转化为int*类型去使用,在前面加上一个(int*)
	//
	int a[10];
	int* p = a;
	//与上述malloc使用效果是一样的
	//这里的数组是有名字的,但是malloc是没有名字的
	return 0;
}

加上必须步骤判断内存申请是否成功

#include<stdio.h>
#include<stdlib.h>
int mian()
{
	int* p1 = (int*)malloc(sizeof(int) * 10);
	if (NULL == p1)
		return 0;
	//在上述判断成功之后,再进行p1指针的使用
	*p1 = 45;
	return 0;
}

在if语句中 可以使用p1 == NULL,但是反过来的话可以有效规避少写一个 = 的尴尬事情发生,感兴趣的小伙伴可以自己去尝试一下~

在c语言中使用动态内存分配以及与用户进行基本的交互
输入元素,打印输入的元素,最后释放分配的内存
代码和详细解释如下
 

#include <stdio.h> 
#include <stdlib.h> // 包含标准库,用于malloc和free等内存操作函数

int main()
{
    int n; // 定义一个整型变量n,用来存储用户输入的数组元素数量
    printf("Enter the number of elements: "); // 提示用户输入元素的数量
    scanf("%d", &n); // 从标准输入读取用户输入的整数并存储在变量n中

    int* arr = (int*)malloc(n * sizeof(int)); // 分配一个大小为n的整数数组的内存,sizeof(int)计算一个int的字节大小

    if (arr == NULL) // 检查malloc是否成功分配了内存
    {
        printf("Memory allocation failed"); // 如果分配失败,输出错误信息
        return 1; // 返回一个非零值,表示程序因错误而终止
    } // 一般情况下return 0表示执行成功,返回非零值则用于指示错误或异常情况

    // 循环读取用户输入的数组元素
    for (int i = 0; i < n; i++)
    {
        printf("Enter element %d:", i + 1); // 提示用户输入当前元素
        scanf("%d", &arr[i]); // 将用户输入的整数存储在数组的相应位置
    }

    // 打印数组中的所有元素
    printf("The elements are: ");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]); // 打印数组的每个元素
    }

    free(arr); // 释放之前分配的内存,防止内存泄漏
    return 0; // 程序正常结束,返回0
}

大家在用完malloc之后记得及时free哦~~

祝您早日成为编程大牛!

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值