1 这是你逻辑上的错误,c编译器不能保证对所有逻辑错误都报错的,这就是为什么我们需要asan,tsan,msan之类的工具
2 重要的是你要理解这是错误的行为,错成什么样并不重要,也许它就读到了一段垃圾数据,鬼知道垃圾数据是个什么结果
【 在 sqsl 的大作中提到: 】
: 标 题: 请教一下malloc和_msize函数
: 发信站: 水木社区 (Fri Sep 8 23:05:35 2023), 站内
:
: 如下一段程序:
:
:
: #include <stdlib.h>
: #include <stdio.h>
: #include <malloc.h>
:
: int main()
: {
: int *p1;
: int *p2;
: int i;
: p1=(int*)malloc(40);
:
: int b=13;
: for(i=0;i<b;i++)
: {
: p1[i]=i;
: printf("%d\n",p1[i]);
: }
: int a;
: a=_msize(p1);
: printf("%d\n",a);
: }
:
:
: 有两个不懂的地方请教一下:
: (1)开辟的是40个字节的空间,为什么程序允许b可以大于20也不报错?
: (2)当b<=12时,a是40,当b>=13时,a是72,这是为什么呢?
: 求指点,谢谢
:
:
:
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 124.126.201.*]
--
FROM 107.204.171.*