在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,但是分配也可能会失败,所以,判断分配的结果就够了,当然,前面多加一次判断也可以,但是不能仅依赖前面的判断。
联系客服