关于malloc(0)的结果

时间:2021-12-09 12:43:24
int* pInt = (int*)malloc(0);
char* pStr = (int*)malloc(0);
printf("local int pInt address is : 0x%08x\n", &pInt);
printf("local int pStr address is : 0x%08x\n", &pStr);
sprintf(pStr,"The pStr alloctor is failed!");
printf("%s\n",pStr);
结果:local int pInt address is : 0x0012ff58
      local int pInt address is : 0x0012ff38
      The pStr alloctor is failed!
1:如果分配了0大小的空间,还能一样实现访问,请问malloc 指定分配的空间的大小还有
什么意义?
2:通常如何来避免分配的空间之间的越界?
3:另外,哪位手里有<design by contact>,可否传给我一本。
地址为:lgwray@sina.com

9 个解决方案

#1


ps:可以介绍一些比较详细的函数,变量的内存分配,管理的文章或书籍么.

#2


malloc (0) 是有效的调用
malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
它是不会返回NULL的,除非内存不足

malloc(0) 返回一个地址,对应的内存大小是1个字节


#3


//malloc (0) 是有效的调用
//malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
//它是不会返回NULL的,除非内存不足

//malloc(0) 返回一个地址,对应的内存大小是1个字节

malloc(0) 返回的内存大小是1个字节还是0个??
如果是1个,不是跟malloc(1)一样了么??

#4


申请0大小,返回1个字节,这个是特殊的规定

#5


char * pStr = (char*)malloc(0);
int i_size = _msize(pStr);
vc 6.0环境,我用这个_msize函数试的, malloc(0);返回 0。
malloc(1) 返回1。

#6


是这个结果,
因为_msize 同样也会特殊处理这块空间的


分配0长度的内存是特殊的需求,例外总有例外的处理办法

#7


C99标准(ISO/IEC 9899:1999 (E))上说:

If the size of the space requested is zero, the behavior is implementationdefined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.

如果所请求的空间大小为0,其行为由库的实现者定义:可以返回空指针,也可以让效果跟申请某个非0大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。

#8


谢谢帮助,还是云里雾里,希望可以提供一些系统的资料。

#9


mark

#1


ps:可以介绍一些比较详细的函数,变量的内存分配,管理的文章或书籍么.

#2


malloc (0) 是有效的调用
malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
它是不会返回NULL的,除非内存不足

malloc(0) 返回一个地址,对应的内存大小是1个字节


#3


//malloc (0) 是有效的调用
//malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
//它是不会返回NULL的,除非内存不足

//malloc(0) 返回一个地址,对应的内存大小是1个字节

malloc(0) 返回的内存大小是1个字节还是0个??
如果是1个,不是跟malloc(1)一样了么??

#4


申请0大小,返回1个字节,这个是特殊的规定

#5


char * pStr = (char*)malloc(0);
int i_size = _msize(pStr);
vc 6.0环境,我用这个_msize函数试的, malloc(0);返回 0。
malloc(1) 返回1。

#6


是这个结果,
因为_msize 同样也会特殊处理这块空间的


分配0长度的内存是特殊的需求,例外总有例外的处理办法

#7


C99标准(ISO/IEC 9899:1999 (E))上说:

If the size of the space requested is zero, the behavior is implementationdefined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.

如果所请求的空间大小为0,其行为由库的实现者定义:可以返回空指针,也可以让效果跟申请某个非0大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。

#8


谢谢帮助,还是云里雾里,希望可以提供一些系统的资料。

#9


mark