首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的sbrk和malloc

C中的sbrk和malloc
EN

Stack Overflow用户
提问于 2014-04-16 02:18:10
回答 2查看 1.8K关注 0票数 0

我有以下代码

代码语言:javascript
复制
#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;
}

我想打印所有空指针的数值和sbrk函数调用form malloc的次数?

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

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

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-04-16 02:26:48

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2014-04-16 02:22:43

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

代码语言:javascript
复制
printf("%p", pointer);

这应该以适合平台的最佳格式输出指针,并且可以由scanf回读。

使用指针的任何其他格式说明符都是显式的未定义的行为,任何事情都可能发生。

而且,根本不能保证malloc()会使用遗留的sbrk()。即使它这样做了,它也可以使用可用的空闲块,而不是必须调用它。接下来,不能保证行为指向有效的存储,因此取消对它的引用是未定义的行为

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23091416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档