我使用的是Ubuntu 14.10和GCC。我试图创建一个无符号整数类型的指针,但我收到此消息:
Segmentation fault (core dumped)
这是我的代码。我使用gdb并认为错误与我的printf
语句有关:
#include <stdio.h>
int main() {
int i;
char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
int int_array[5] = {1, 2, 3, 4, 5};
unsigned int hacky_nonpointer;
hacky_nonpointer = (unsigned int) char_array;
for (i = 0; i < 5; i++) {
printf("[hacky_nonpointer] points to 0x%08x which contains the char '%c' \n",
hacky_nonpointer, *(char *(hacky_nonpointer)));
hacky_nonpointer = hacky_nonpointer + sizeof(char);
}
hacky_nonpointer = (unsigned) int_array;
for (i = 0; i < 5; i++) {
printf("[char pointer] points to %08x, which contains the integer %d\n",
hacky_nonpointer, *((int *)hacky_nonpointer));
hacky_nonpointer = hacky_nonpointer + sizeof(int);
}
return 0;
}
答案 0 :(得分:2)
unsigned int
可能不足以容纳指针。如果可用,您应该使用uintptr_t
stdint.h
,如果没有,则size_t
。
答案 1 :(得分:0)
首先是什么:
points to 0x%08x
你的意思可能是%p
*(char *(hacky_nonpointer)));
那就是下一次失败
理所当然地*((char *) hacky_nonpointer));
这里你需要输入空格:
*((int *)hacky_nonpointer));
理所当然地:
*((int *) hacky_nonpointer));
这里没有空格:
'%c' \n"
理所当然:
'%c'\n"
您的代码必须在更正后运行