打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C语言之神奇的malloc(0)
userphoto

2023.07.17 湖南

关注

在C语言中,malloc函数用于动态分配内存。根据C标准,malloc(0)的行为可能因编译器和系统而异。针对malloc(0)的调用,可能会返回以下两种结果之一:

1.返回一个非空指针:在这种情况下,该指针不能用于访问任何内存,但可以被传递给free 函数以释放该块内存。这意味着 malloc(0)返回的指针和正常返回的指针具有相同的属性,即你可以将其传递给free()而不会引发错误。

2.返回·NULL指针:在这种情况下,malloc(0)表示动态内存分配失败。此时,你需要检查返回的指针是否为NULL,以确保在使用该指针之前不会出现问题。

这是一个关于如何使用malloc(0)的示例以及如何检查返回值的代码片段:

#include <stdio.h>#include <stdlib.h>int main(){ void *ptr=malloc(0); if(ptr==NULL){ printf('Memory allocation failed.\n'); }else { printf ('Memoryallocation successed.\n'); //释放内存 free(ptr); } return 0;}

为了确保代码在不同的编译器和系统上正确运行,请始终检查malloc的返回值,而不是假定其行为。这样,即使在malloc(0)返回非空指针或NULL指针的情况下,代码仍将正确运行。



C++是new关键词。

从来没试过char * pchTemp = new char[0][捂脸]

最常见的场景是数据复制,都是知道明确长度的,只有字符串复制时可能是空字符串,一般都是先检查字符串长度再判断要不要去new一下。

指针是C和C++最强大的工具,任何介绍指针的书和老师都必定会多次强调:使用指针前必须确保指针地址的正确性,与null对比是最基本检查。

一般使用下面风格的逻辑和代码:

unsigned long dwLen=strlen(pchSource);

char * pchTemp = NULL;

if (0!=dwLen)

{

pchTemp=new char [dwLen+1];

if (NULL!=pchTemp)

{

strcpy(pchTemp,pchSource);

}

}

return pchTemp;

就算遇到堆栈溢出,上面的代码也不会出错。


在用malloc之前,先判断长度是否为0,如果是,返回null。这样不是更简单。//在malloc前判断size的行为是对的,但是其实这样做的比较少。//也有可能内存不足分配失败,所以判断返回是没问题。//不行,假如你内存只有 1mb,但是你传给他2mb,长度不为 0,但是分配也可能会失败,所以,判断分配的结果就够了,当然,前面多加一次判断也可以,但是不能仅依赖前面的判断。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C中内存建立与释放的函数
ptr = malloc(0*sizeof(char));(转载)
C++内存管理
动态内存分配,地址对齐
malloc函数的用法
单链表的建立(C语言完整程序)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服