相关疑难解决方法(0)

我可以使用比使用malloc()分配的内存更多的内存,为什么?

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)不导致运行时错误?

谢谢.

c

34
推荐指数
3
解决办法
7422
查看次数

释放指针的算法

在阅读这个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)

未定义?或者"溢出"的用法是不同的?

c pointers language-lawyer

3
推荐指数
1
解决办法
200
查看次数

标签 统计

c ×2

language-lawyer ×1

pointers ×1