首页 > 编程知识 正文

malloc函数的用法,c语言malloc函数用法示例

时间:2023-05-04 11:57:28 阅读:274116 作者:32

最近在牛客网在做嵌入式笔试题,遇到new关键字,以下是我的总结。局部变量存放在栈中,在函数结束后自动释放。下面这题是一道嵌入式面试题一部分,找出以下错误。

#incude <stdio.h> void *get1() { char buf[12]={"abc"}; return buf; } int main() { int *m; m=get1(); memcpy(m,"aaa",3); return 0; }

1.首先get1函数里的数组是局部变量,存放在栈区,对应的内存在函数结束时就会被释放。因此返回的地址是无效的。调用这样的地址是严重错误的。
2.调用memcpy(m,“aaa”,3),向没有权限的无效内存空间存放数据是非法的。
3.指针最好初始化,野指针容易出现非法访问。
malloc
动态内存分配函数,经常用在为数组申请动态内存空间,分配一块连续的内存。在堆上进行动态内存分配,由程序员自己释放,free函数释放。

int *array=(int *)malloc (sizeof (int) *100) //返回是int*类型,内存空间大小100个整型数据 int *array =(int *)malloc (1) // 申请了一个字节的空间,如果向里面存放了一个整数的话 程序运行会报错 int *p; p = malloc(sizeof(int)); //若 malloc的返回是void *; ;则将void *转化给了int *,这不合理

new
new在堆上进行分配动态内存,用于C++中,由程序员自己释放,删除数组delete []p,指针释放后,要将指针置空。

int *p; p = new int; //返回类型为int *类型,分配的大 小为 sizeof(int) p = new int[100]; //返回类型为int *类型,分配的大小为sizeof(int) * 100 为 100个int字节

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。