我有以下代码
#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值不应该被忽略,因为它应该是 我怎么能这样做?
由于
答案 0 :(得分:2)
sbrk(0)返回“程序中断”的当前大小,它实际上不是指针,因此取消引用它会产生错误。
答案 1 :(得分:1)
使用printf在C中打印数据指针的正确方法是这样(代码指针没有格式):
printf("%p", pointer);
那应该以平台的最佳格式输出指针,并且可以通过scanf
回读
使用指针的任何其他格式说明符明确未定义行为,可能会发生任何事情。
此外,无法保证malloc()
完全使用遗留sbrk()
。即使它确实如此,它也许可以使用可用的空闲块而不必调用它。接下来,无法保证sbrk()
指向有效存储,因此取消引用它是未定义的行为。