cb中的sbrk和malloc

时间:2014-04-15 18:18:10

标签: c malloc sbrk

我有以下代码

#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函数调用malloc的次数?

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

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

由于

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

printf("%p", pointer);

那应该以平台的最佳格式输出指针,并且可以通过scanf回读 使用指针的任何其他格式说明符明确未定义行为,可能会发生任何事情。

此外,无法保证malloc()完全使用遗留sbrk()。即使它确实如此,它也许可以使用可用的空闲块而不必调用它。接下来,无法保证sbrk()指向有效存储,因此取消引用它是未定义的行为