当前位置: 技术问答>linux和unix
sprintf函数的第一参数字符缓冲区为何分配空间不够,在linux运行也不出现内存错误?
来源: 互联网 发布时间:2016-03-29
本文导语: 代码: int main() { char *buf=(char*)malloc(1); int temp=10000; sprintf(buf,"%d",temp); printf("%sn",buf); return 0; } 我只给buf分配了一个字节的空间,显然不够把temp转成的字符格式都放下,为什么运行的时候没有报内存错误(如...
代码:
int main()
{
char *buf=(char*)malloc(1);
int temp=10000;
sprintf(buf,"%d",temp);
printf("%sn",buf);
return 0;
}
我只给buf分配了一个字节的空间,显然不够把temp转成的字符格式都放下,为什么运行的时候没有报内存错误(如段错误之类的)。
同样在vc6.0下,运行就出现了内存错误。
这是怎么回事?请各位指点。
int main()
{
char *buf=(char*)malloc(1);
int temp=10000;
sprintf(buf,"%d",temp);
printf("%sn",buf);
return 0;
}
我只给buf分配了一个字节的空间,显然不够把temp转成的字符格式都放下,为什么运行的时候没有报内存错误(如段错误之类的)。
同样在vc6.0下,运行就出现了内存错误。
这是怎么回事?请各位指点。
|
你只分配了一个字节,但写了4个字节进去了
是可以写进去,但会踩了别的内存空间
是可以写进去,但会踩了别的内存空间
|
结果是随机的,不过就你这个来说,由于字节对齐的缘故,buf虽然是分配了一个字节,但后边会有3个字节
的空间是空闲的。你这样用倒奇妙的躲过了出错的机会。但你使用的空间再超过这些的时候,就会出现不可预知的错误了。
的空间是空闲的。你这样用倒奇妙的躲过了出错的机会。但你使用的空间再超过这些的时候,就会出现不可预知的错误了。
|
这是因为没有内存保护。
|
这好理解呀,被你糟蹋的内存的老公还没回来check呢。
|
呵呵,不可预知,没出错不等于没错
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。