zoukankan      html  css  js  c++  java
  • 关键字new与malloc函数

    做题出bug,OJ说我没有定义new。

    纳尼?new还需要定义?不都是直接用的吗,明明在自己的编译器里都可以通过的!

    编译器:劳资是C++....

    一番倒腾后发现,我用的C++,但是OJ的编译器是C,所以不行。

    原来C中是没有new的定义的,那么我们先找找new在哪里。

    在VS2018_Community的头文件<vcruntime_new.h>中,我们可以看到很多new的代码,这里截取一小部分

     1 _Ret_notnull_ _Post_writable_byte_size_(_Size)
     2 _VCRT_ALLOCATOR void* __CRTDECL operator new(
     3     size_t _Size
     4     );
     5 
     6 _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(_Size)
     7 _VCRT_ALLOCATOR void* __CRTDECL operator new(
     8     size_t _Size,
     9     std::nothrow_t const&
    10     ) noexcept;
    11 
    12 _Ret_notnull_ _Post_writable_byte_size_(_Size)
    13 _VCRT_ALLOCATOR void* __CRTDECL operator new[](
    14     size_t _Size
    15     );
    16 
    17 _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(_Size)
    18 _VCRT_ALLOCATOR void* __CRTDECL operator new[](
    19     size_t _Size,
    20     std::nothrow_t const&
    21     ) noexcept;

    看不懂?没事,我也不懂。

    总的来说,new是C++所规定的关键字,虽然在一些头文件中有定义或重写,但实际上new是不依赖于头文件的。换句话说,只要你的编译器能编译C++代码,那就能用new。

    而C不存在new的定义,这就导致了编译错误。

    那我想在C里new怎么办?

    new实际上就是动态分配空间,在C中可以用函数malloc()实现,其在头文件<stdlib.h>中。

    1 void *malloc (size_t size);    //函数声明
    2 x=(int) malloc(sizeof(a[10]);     //具体例子

    因为规定为void函数指针,所以在应用时需要根据实际情况进行转型。参数为动态分配空间的大小,通常用sizeof确定。

    C++中有new就有delete,那C呢?

    C有malloc就有free,与delete相似,用于释放动态申请的空间,就不多说啦。

  • 相关阅读:
    网络游戏
    嘎嘎
    Failed to install *.apk on device 'emulator-5554': timeout
    安卓开发真机遇到Failed to install Spaceassault.apk on device 'HT1CKV205198': timeout 测试机没有问题
    java匿名内部类
    TextView tv01=(TextView)this.findViewById(R.id.TextView01); tv01.setText("设置文字背景色");
    android 项目中出现红色感叹号的解决方法
    使用block来解决实现switch解决字符串
    oc中的block
    不可变数组或者可变数组进行排序
  • 原文地址:https://www.cnblogs.com/luoyang0515/p/10529761.html
Copyright © 2011-2022 走看看