关键字new与malloc函数
做题出bug,OJ说我没有定义new。
纳尼?new还需要定义?不都是直接用的吗,明明在自己的编译器里都可以通过的!
编译器:劳资是C++....
一番倒腾后发现,我用的C++,但是OJ的编译器是C,所以不行。
原来C中是没有new的定义的,那么我们先找找new在哪里。
在VS2018_Community的头文件<vcruntime_new.h>中,我们可以看到很多new的代码,这里截取一小部分
_Ret_notnull_ _Post_writable_byte_size_(_Size)
_VCRT_ALLOCATOR void* __CRTDECL operator new(
size_t _Size
); _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(_Size)
_VCRT_ALLOCATOR void* __CRTDECL operator new(
size_t _Size,
std::nothrow_t const&
) noexcept; _Ret_notnull_ _Post_writable_byte_size_(_Size)
_VCRT_ALLOCATOR void* __CRTDECL operator new[](
size_t _Size
); _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(_Size)
_VCRT_ALLOCATOR void* __CRTDECL operator new[](
size_t _Size,
std::nothrow_t const&
) noexcept;
看不懂?没事,我也不懂。
总的来说,new是C++所规定的关键字,虽然在一些头文件中有定义或重写,但实际上new是不依赖于头文件的。换句话说,只要你的编译器能编译C++代码,那就能用new。
而C不存在new的定义,这就导致了编译错误。
那我想在C里new怎么办?
new实际上就是动态分配空间,在C中可以用函数malloc()实现,其在头文件<stdlib.h>中。
void *malloc (size_t size); //函数声明
x=(int) malloc(sizeof(a[]); //具体例子
因为规定为void函数指针,所以在应用时需要根据实际情况进行转型。参数为动态分配空间的大小,通常用sizeof确定。
C++中有new就有delete,那C呢?
C有malloc就有free,与delete相似,用于释放动态申请的空间,就不多说啦。
关键字new与malloc函数的更多相关文章
- malloc 函数详解【转】
转自:https://www.cnblogs.com/Commence/p/5785912.html 很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一 ...
- malloc 函数详解
很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的.但是但是: 一部分人还是将:malloc当作系统所提供的或 ...
- C++ malloc函数
malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内 ...
- 关于malloc函数的动态分配问题
malloc函数动态分配了一个整型的内存空间,让abc都指向刚申请的空间,所以只有最后一个赋值语句的值保留在了空间里 #include<stdio.h> main() { int *a,* ...
- malloc 函数工作机制(转)
malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...
- malloc函数详解
一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc ...
- malloc 函数到底做了什么?
请看下面的代码. 猜测结果是什么?编译通过吗? #include <stdio.h> #include <stdlib.h> int main() { ; char *ptr ...
- malloc函数和其他内存分配函数
1. 需要包含头文件:#i nclude 或 #i nclude 函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间 ...
- malloc函数
C语言中,使用malloc函数向内存中动态申请空间. 函数的原型是extern void *malloc(unsigned int num_bytes); 可见,函数返回的是指针类型,参数是要申请的空 ...
随机推荐
- Hibernate 相关配置
hibernate.temp.use_jdbc_metadata_defaults 它是用来控制是否应该向JDBC元数据来确定某些设置默认值,在数据库某些服务不可用的设置为 *不*,在某些工具中开发是 ...
- 关于我与小组成员逐步升级C代码时的一些感想【第二次作业】
#include<stdio.h> #include<stdlib.h> #include <time.h> int main(){ srand(time(NULL ...
- Java实现打印日历的功能
编写一个程序,显示给定年月的日历.程序提示用户输入年份和月份,然后显示该月的整个日历. 代码: import java.util.Scanner; public class PrintCalendar ...
- vue使用axios 时 后台接收不到数据
后台用django 时,默认接收的数据格式为formdata ,前端如果传了其他格式会出现后台收不到参数的情况. 前端参数转 fromdata 代码如下 let formData = new Form ...
- 【爬虫】如何用python+selenium网页爬虫
一.前提 爬虫网页(只是演示,切勿频繁请求):https://www.kaola.com/ 需要的知识:Python,selenium 库,PyQuery 参考网站:https://selenium- ...
- css多行省略
单行省略就不用说了,用css实现非常简单,兼容性还非常好.但是多行省略一直都是前端的痛点,在css3之前,可以用js去算两行能放多少个字,把多余的字用 ... 代替,且不说好不好,万一哪天PM说要改成 ...
- layer.open弹出窗口后在子页面修改弹窗的title
在子页面修改layer.open弹窗的title,代码如下: var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索 ...
- java-同一用户顶替操作(session过期或无效)
同一账号后者登录前者被强制退出:(可以通过监听器或过滤器进行监测session是否无效) 首先根据输入的用户名和密码做验证,通过验证查询用户信息.在用户信息不为空的前提下,比较静态变量中的sessio ...
- Linux 定时任务Crontab的使用
1.准备好Java程序,导出为Jar文件 如myProject.jar 2.写Shell脚本 startTask.sh echo 'start...' cd /home/root/yourFolde ...
- MyBatis DTD文件下载地址
下载链接: http://mybatis.org/dtd/mybatis-3-config.dtdhttp://mybatis.org/dtd/mybatis-3-mapper.dtd