char *cp = (char *) malloc(1);
strcpy(cp, "123456789");
puts(cp);
Run Code Online (Sandbox Code Playgroud)
gcc(Linux)和Visual C++ Express上的输出是"123456789",这是否意味着当有空闲内存时,我实际上可以使用比我分配的内容更多的内容malloc()?
为什么malloc(0)不导致运行时错误?
谢谢.
在阅读这个SO问题的答案时,我了解到越界指针算法是未定义的.的确,根据C99 6.5.6第8段
如果指针操作数和结果指向相同的数组对象,或一个过去的数组对象的最后一个元素的元素两者,所述评估也不得产生溢出; 否则,行为未定义.
释放该对象会使该保证无效吗?7.20.3.2"自由功能"似乎没有提及它,只是提到"空间被解除分配".由于6.5.6特别提到溢出,它似乎是一个整数溢出问题,free不会影响.指向对象的指针是否是"引用它"的行为?
换句话说,是:
char *foo = malloc(10);
free(foo);
foo++;
Run Code Online (Sandbox Code Playgroud)
未定义?或者"溢出"的用法是不同的?