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个字节
malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
它是不会返回NULL的,除非内存不足
malloc(0) 返回一个地址,对应的内存大小是1个字节
#3
//malloc (0) 是有效的调用
//malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
//它是不会返回NULL的,除非内存不足
//malloc(0) 返回一个地址,对应的内存大小是1个字节
malloc(0) 返回的内存大小是1个字节还是0个??
如果是1个,不是跟malloc(1)一样了么??
//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。
int i_size = _msize(pStr);
vc 6.0环境,我用这个_msize函数试的, malloc(0);返回 0。
malloc(1) 返回1。
#6
是这个结果,
因为_msize 同样也会特殊处理这块空间的
分配0长度的内存是特殊的需求,例外总有例外的处理办法
因为_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大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。
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个字节
malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
它是不会返回NULL的,除非内存不足
malloc(0) 返回一个地址,对应的内存大小是1个字节
#3
//malloc (0) 是有效的调用
//malloc当中分配的资源是多大,要自己检测,不要希望malloc返回NULL
//它是不会返回NULL的,除非内存不足
//malloc(0) 返回一个地址,对应的内存大小是1个字节
malloc(0) 返回的内存大小是1个字节还是0个??
如果是1个,不是跟malloc(1)一样了么??
//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。
int i_size = _msize(pStr);
vc 6.0环境,我用这个_msize函数试的, malloc(0);返回 0。
malloc(1) 返回1。
#6
是这个结果,
因为_msize 同样也会特殊处理这块空间的
分配0长度的内存是特殊的需求,例外总有例外的处理办法
因为_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大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。
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