有关的malloc,指标的有关问题
有关的malloc,指标的问题[解决办法]1)b 分配了5字节的内存,合法内存5个字节。2)&b只有sizeof(char **) 个
有关的malloc,指标的问题
[解决办法]1)b 分配了>=5字节的内存,合法内存5个字节。
2)&b只有sizeof(char **) 个字节,指针占几个字节,&b 这个地址对应的内存,就有多少字节。
b 只有sizeof(char *) 个字节,指针占几个字节,b 这个指针对应的内存,就有多少字节。
scanf("%s",&b); 往 指针b占用的内存输入字符串,
char *b=(char *)malloc(sizeof(char)*5);这一步,得到的内存地址,的数据。
就被覆盖了,你就没有办法 用free(b) 来释放内存了。
好在char *c=b;做了个备份,可以通过 free(c) 来释放内存了。
2)&b可用的位置有多少?抱歉只有,sizeof(char *) 这么多,32Bits恰好是4个,还要存储‘\0’;
b 可用的位置有5个,一个存储‘\0’,
scanf("%s",b); 最多可以输入4个字符,后面自动会添加‘\0’;
输入12345,显示12345
这其实已经出错了,这是越界访问。
[解决办法]其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。