-1

几个小时以来,我一直试图弄清楚这一点,这让我有点发疯。执行程序时不断出现分段错误,我该如何解决?我也收到警告“尝试从不同大小的整数中指向指针”,但是当我使用强制转换 (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] );
}
4

3 回答 3

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] );
}
于 2013-06-02T14:43:48.190 回答
0

这里没有什么可修复的。您正在尝试访问一个不存在的内存地址,或者您没有访问权限。

在这里阅读:http ://en.wikipedia.org/wiki/Segmentation_fault#Common_causes

于 2013-06-02T13:49:31.543 回答
0

利用

p = &address;memcpy(p,&address,sizeof(int)),instead of p = (int *) address;

此外,如果长度大于 1,则可能存在分段错误

for (i=0; i<length;i++){
 printf( "%02x ", p[i] );
}
于 2013-06-02T14:00:53.710 回答