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相似,用于释放动态申请的空间,就不多说啦。

  • 相关阅读:
    获得Coclor的色值(小技巧)
    如何禁止IIS缓存静态文件(png,js,html等)(转)
    风投最关心的问题
    Repeater一行显示数据库中多行表记录
    c# int Int32 Int64 的区别
    动车实名制了
    学习,积累,10000小时定律
    映射路由器到内网ip和端口
    《轮环》故事大纲整理
    .Net读取xlsx文件Excel2007
  • 原文地址:https://www.cnblogs.com/luoyang0515/p/10529761.html
Copyright © 2011-2022 走看看