关于malloc函数动态分配内存的大小
char *p;p = (char *)malloc(10*sizeof(char));
当输入大于十个字符时后面的仍然可以打出,为什么不会报错?: 当输入大于9个字符时,后面的字符有时可以打印出,有时不能打印出。就好像,当你自己的钱用完了,从别人口袋里拿钱用的时候,有事可以拿出,有时不能拿出一样。 仰望天上的光 发表于 2014-10-7 16:36
当输入大于9个字符时,后面的字符有时可以打印出,有时不能打印出。就好像,当你自己的钱用完了,从别人口 ...
谢谢啦! 事实上超出10之后就是溢出了 但是字符串输出只看截断符如果没有截断符 那么会继续输出 某些方面的溢出编译器是识别不了的只能自己去管理和限制 get it ~ 结果到底是怎样的呢 溢出了! malloc分配内存一次是分配4kb大小的内存页,对数组后面的溢出部分你可以写入 但是不能保证本进程或进程不能进行操作了。 当你写入值后你不能安全的使用用 因为这段溢出的内存可以被其他地方占用 当你引用其数值时 可能已经不再是当初你写入的值了。
并不是只要溢出就会出现崩溃之类的 只要你向溢出的位置写入的值对其他地方的使用是合法的就行 优雅的独行者 发表于 2014-10-10 19:54
malloc分配内存一次是分配4kb大小的内存页,对数组后面的溢出部分你可以写入 但是不能保证本进程或进程不能 ...
也就是说溢出的部分如果没有被覆盖还是可以输出的,只不过不安全,有被覆盖掉的风险? 网络学习 发表于 2014-10-9 02:18
结果到底是怎样的呢
比如输入abcdefghijklmn,这些字母全部可以输出,并非只输出分配地址的10个字符 小诸葛080 发表于 2014-10-11 08:25
也就是说溢出的部分如果没有被覆盖还是可以输出的,只不过不安全,有被覆盖掉的风险?
对的 就是这个意思 只要别的地方不使用溢出部分就可以正确输出 如果别的地方使用了溢出部分 就会输出错误了 已经溢出了但是吧 这个要看情况有时候可以有时候不行 malloc分配地址属于官方登记过的 所有的操作受“法律”保护
其它操作是非法的 出现问题后果自负
页:
[1]