C++ malloc()的使用

1. 使用malloc()函数需要链接的头文件:

头文件 #include <malloc.h> 或 #include <alloc.h> ,这两个头文件内容一致,用哪个都行

2. malloc()函数原型是 void* malloc(unsigned int num_bytes);

功能:

(1)malloc函数的功能是内存上分配一段长度为 num_bytes 个 byte 大小的空间 (num_bytes的数值大小最大为 unsigned int)

(2)如果成功在内存上分配一段空间则返回一个 void类型的指针 ,因此,如果我们想使用一个int型指针指向这段空间那么需要将返回值进行强转成int*类型

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

若上述代码不使用(int*)进行强转,那么会报错,因为不可以将void*直接赋值给int*类型的变量

(3)若申请内存不成功,则会返回一个空指针 NULL 

(4)当申请的这段内存不再使用时,用free()函数释放掉

free(p);

3. malloc 与 new 的区别:

new 返回的是指定类型的指针,new的参数也是要新建多少个指定类型的数据对应的空间

malloc返回的是一个void类型的指针,malloc的参数是字节个数

4. 最常用的方式就是申请空间,然后向数组一样使用它:

#include <iostream>
#include <math.h>
#include <malloc.h>


int main()
{
    int *p;
    p = (int*)malloc(sizeof(int)*10);
    for(int i=0;i<10;i++)
    {
        p[i]=i*10;
    }

    for(int i=0;i<10;i++)
    {
        std::cout<< p[i] << std::endl;
    }

    free(p);    //记得free()

    return 0;
}

5. malloc注意事项:

如果我们做了这样的操作:只申请了1个byte大小的空间却想向里面塞入4个byte大小的int型数据,这就会导致超出指针p申请到的可用的空间了,这会导致我们侵犯了其他的显存空间,从而可能引发不知名错误

#include <iostream>
#include <math.h>
#include <malloc.h>

int main()
{
    int *p;
    p = (int*)malloc(1);
    std::cout<<sizeof(int)<<std::endl;      //大小为4
    p[0]=5;
    std::cout<<p[0]<<std::endl;
    std::cout<<p[1]<<std::endl;

    
    free(p);    //记得free()

    return 0;
}

如下图示:指针P只申请了0号空间,但执行了p[0]=5; 语句后,int型数据5占用了0,1,2,3四块空间,那么,若原来1,2,3号空间上的内容就会被覆盖掉

但是,指针p由于是一个int型指针,那么它的读取就一定是假定指向的空间都是以int型数据大小划分的,所以每次会从P的位置开始,每四块空间作为一个数据读取,并输出,这就是为啥我们会读到数字5 。这也是为啥12行的 p[1] 也可以输出,但是大家的输出内容应该不太一样或直接报错,因为这相当于让指针指向不归它管的内存块了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值