0

我有以下代码

#include<stdio.h>
int main () {
        void *result[20];
        void *endptr;
        void *x;
        for (i = 0; i < 20; i++) {
                result[i] = malloc(10);
                printf("111 : %d\n",result[i]);
        }
        endptr= sbrk(0);
        printf("\n222 : %d\n",endptr);
        x = malloc(60); ----------- error
        return 0;
}

我想打印所有 void 指针的数值并计算多少次 sbrk 函数调用 form malloc?

如果我在 printf 语句中打印 *endptr 它会给我错误。目前我认为它会打印分配内存的地址。%x 只会将当前值转换为十六进制并打印对吗?

x = malloc(60) 也给出了错误: void 值没有被忽略,因为它应该是我该怎么做?

谢谢

4

2 回答 2

2

sbrk(0) 返回“程序中断”的当前大小,它实际上不是指针,因此取消引用它会出错。

http://en.wikipedia.org/wiki/Sbrk

http://pubs.opengroup.org/onlinepubs/007908799/xsh/brk.html

于 2014-04-15T18:26:47.527 回答
1

使用 printf 在 C 中打印数据指针的正确方法是这样的(代码指针没有格式):

printf("%p", pointer);

这应该以平台的最佳格式输出指针,并且可以通过scanf.
对指针使用任何其他格式说明符都是明确的Undefined Behavior,任何事情都可能发生。

此外,根本无法保证malloc()使用旧版sbrk()。即使这样做,它也可能能够使用可用的空闲块而不必调用它。接下来,没有保证sbrk()指向有效存储,因此取消引用它是未定义的行为

于 2014-04-15T18:22:43.063 回答