访问C中的内存地址的内容

时间:2013-06-02 13:44:22

标签: c memory-access

我一直在试图弄清楚这几个小时,让我有点疯狂。 我在执行程序时遇到分段错误,我该如何解决? 我也得到一个警告“试图从不同大小的整数指针”,但当我使用 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] );
}

3 个答案:

答案 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] );
}