c语言中malloc函数和new关键字的作用与用法

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

    #incude 
    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) * 100100int字节

你可能感兴趣的:(c语言中malloc函数和new关键字的作用与用法)