关于malloc(0)的对与错

大家都知道malloc(-1)是错的,但是malloc(0)到底是对还是错呢?

在以前我也没有考虑过,只知道malloc(0)是没有申请任何空间的,是没法往里面写入东西的,但是我在linux上和window编译时却让我出乎意料,它既然没有报错,可以输入和输出,看一个例子大家就知道了:

window上运行结果:

linux上运行结果:

我一直在想为什么会能正确的输入和输出,是自己很苦恼,按道理说它是错的,让自己很苦恼

经过查找资料终于明白了,原来

char* p = (char *) malloc (0);

代码也能通过编译,但事实上只分配了0个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归

,结果是后面的内存中原有数据内容被改写。这样做是很危险的。

这种错误也可以自己测试出来,虽然写入动态空间,但是在释放动态空间是没法释放的,因为free函数不能释放别人的空间。

你们可以发现上面的程序申请动态内存后都没有释放,这样才导致了错误的出现

正确代码是:

总结:在写代码是申请了动态内存一定要及时释放,否则会出现内存泄漏,虽然短时间内没法发现,但是他是一个潜在危险。

时间: 2024-11-04 03:02:56

关于malloc(0)的对与错的相关文章

malloc 0

buf = malloc(0) //buf为一个有效的地址 buf = malloc(1.5)   //buf为一个有效的地址 buf = malloc(-1) //buf为NULL free(NULL) //编译不会报错,运行也没问题,不清楚是否存在影响例如:char *buf = NULL;buf = malloc(4); memset(buf,0,4); free(buf) buf = NULL; free(buf); 原文地址:https://www.cnblogs.com/baidub

AFNetwork 2.0在请求时报错code=-1016 和 3840

在进行网络请求时出现-1016 是因为只支持 text/json,application/json,text/javascript 你可以添加text/html 一劳永逸的方法是 在 AFURLResponseSerialization.h 里面搜索 self.acceptableContentTypes 然后 在里面 添加 @"text/html",@"text/plain" 这样就可以解决-1016的错误了 但是随之而来的是3840错误 Error Domain

在VMware里克隆出来的redhat linux 6.0,重启网卡报错

在VMware里克隆出来的redhat linux 6.0,重启网卡报错,无法ping通eth0的IP地址. 故障现象: service network restartShutting down loopback insterface:                                                                                                     [  OK  ]Bringing up loopback in

关于cocos2dx 3.0升级崩溃报错(unable to load native library) 和(Fatal signal 11 (SIGSEGV) at 0x00000000)

最近一直在Windows平台开发cocos-2dx游戏,期间做了一次引擎升级,升级到了3.0正式版本.Windows平台上表现很正常,没有出现什么问题. 上周五准备发布一个安卓包,编译很轻松的就过了,没有花费多少时间,但是安装到手机后,发现运行就崩溃了.没办法只好用模拟机调试,再次吐槽Android的模拟器,真的太他妈慢了,不到万不得已我真的不想再去用它,google真的应该好好整一下了. 好不容易运行起来了,看到崩溃的时候logcat的报错是"unable to load native lib

编译hadoop2.2.0源码时报错

编译hadoop2.2.0源码时, mvn install -DskipTests 报错: [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /home/test/work/env/hadoop/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/src/test/java/org/apa

ptr = malloc(0);

#include <stdio.h> #include <stdlib.h> #include <string.h> /* 避免错误: size 进行判断后在进行动态分配. 为什么? malloc在不同编译器上有不同的实现,有的申请0大小返回NULL, 有的就可以返回一个地址,似乎后者较为常见. 当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额 外的内存来存储我们的内存块信息,用于维护该内存块. 其实内存是分片的, 比喻说你malloc(10):

mysql 8.0 java连接报错:Unknown system variable &#39;query_cache_size&#39;

java连接mysql 8.0.11报错 java.sql.SQLException: Unknown system variable 'query_cache_size' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:545) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513) at co

malloc(0)分配多少内存?(译文)

原文地址:http://prog21.dadgum.com/179.html 在大多的系统中,这个C的小程序将会吸收全部空闲的内存. while(1){ malloc(0); } 在我们聊malloc(0)之前,让我们看看malloc(1)这个更简单的情况. 这有一个关于malloc的新的有趣的C程序问题:"用一个指针去动态的分配内存,我们能怎样决定它指向多少字节(byte)?"这个答案是令人沮丧的"你不能决定."但是当你调用free在相同的指针,内存分配知道这个块

native 链接 mysql 8.0以上版本 报错2059

MySQL版本是8.0.4  由于新版本的MySQL新特性导致的. mysql> select Host,User,plugin from mysql.user; +-----------+------------------+-----------------------+ | Host | User | plugin | +-----------+------------------+-----------------------+ | localhost | mysql.infoschem

C语言malloc(0)情况分析

https://blog.csdn.net/zhoujian0827/article/details/78354151 https://blog.csdn.net/shimadear/article/details/80291194 https://blog.csdn.net/fovwin/article/details/8170914 //软件编写时,应避免出现malloc(0)的情况. 原文地址:https://www.cnblogs.com/retry/p/11055534.html