我一直在试图弄清楚这几个小时,让我有点疯狂。 我在执行程序时遇到分段错误,我该如何解决? 我也得到一个警告“试图从不同大小的整数指针”,但当我使用 cast(int *)我仍然收到警告。请帮忙... 这是代码:
int address, length, i;
int * p = malloc(sizeof(int));
printf("Please enter <address> <length>\n");
scanf("%x %d", &address, &length);
p = (int *) address;
for (i=0; i<length;i++){
printf( "%02x ", p[i] );
}
答案 0 :(得分:1)
这应该“有用” - 当然,你仍然需要输入一个有效的地址,否则代码会崩溃,因为你试图从一个你无法读取的地址读取 - 你无能为力,不能重写处理“你试图读取不存在或不属于你的内存”的操作系统部分。
uintptr_t address;
int length, i;
int *p;
// No need to malloc here. malloc(sizeof(int));
printf("Please enter <address> <length>\n");
scanf("%" PRIxPTR " %d", &address, &length);
p = (int *) address;
for (i=0; i<length;i++){
printf( "%02x ", p[i] );
}
答案 1 :(得分:0)
这里没有什么可以解决的。您正在尝试访问不存在的内存地址,或者您无权访问。
请在此处阅读:http://en.wikipedia.org/wiki/Segmentation_fault#Common_causes
答案 2 :(得分:0)
使用
p = &address;
或memcpy(p,&address,sizeof(int))
,instead of p = (int *) address;
如果长度大于1,则
可能存在分段错误for (i=0; i<length;i++){
printf( "%02x ", p[i] );
}