|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- int main(void){
- int *p;
- int l = 0;
- p = malloc(sizeof(int) * 1);
- printf("enter some int: ");
- while (scanf("%d", &p[l++]) && getchar() != '\n'){
- continue;
- }
- for (int i = 0; i < l; i++)
- printf("%d ", p[i]);
- return 0;
- }
复制代码
我只给分配了一个整数的内存空间, 可是我在输入的时候即使输入20个整数,也正常读取并存储了,这又是为什么啊。真的是,说C严谨吧编译起来运行又有这么多不确定性的东西,说C不严谨吧,C的代码又告诉我它是严谨的,真的好烦啊。
本帖最后由 人造人 于 2021-10-20 17:58 编辑
这样会覆盖到后面的东西,对于你的这个程序来说,后面没有东西了
看下面的程序
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main(void){
- int *p;
- int l = 0;
- p = malloc(sizeof(int) * 1);
- int *temp = malloc(0x10);
- printf("enter some int: ");
- while (scanf("%d", &p[l++]) && getchar() != '\n'){
- continue;
- }
- for (int i = 0; i < l; i++)
- printf("%d \n", p[i]);
- memset(temp, 0xff, 0x10);
- printf("\n");
- for (int i = 0; i < l; i++)
- printf("%d \n", p[i]);
- printf("%p\n", p);
- printf("%p\n", temp);
- return 0;
- }
复制代码
- $ ./main
- enter some int: 123 123 123 123 123 123 123 123 123 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- 123
- -1
- -1
- 0x800038c20
- 0x800038c40
复制代码
对于我这边,两次 malloc 之间空了 32 个字节(不同的环境估计是不一样)
也就是说输入超过 32 个字节就覆盖到了下一个 malloc 的位置
|
|