尝试操作位时出现分段错误
segmentation fault while trying to manipulate bits
我正在阅读一本名为《计算机系统:程序员的视角》的书,以深入了解现代计算机的内部工作原理。
今晚我试图查看 int 和 unsigned 的内部,看看它们是由什么组成的。我想到了这个:
#include <stdbool.h>
#include <stdio.h>
typedef unsigned char * byte_pointer;
void bp2b(byte_pointer bp, bool bits[8]){
unsigned char n;
for (n = 0; n<8; n++){
if (*bp & (1 << n))
bits[7-n] = true;
else bits[7-n] = false;
}
}
void show_byte(byte_pointer bp){
int ind;
bool bits[8];
bp2b(bp, bits);
for (ind = 0; ind < 8; ind++){
printf("%d",bits[ind]);
}
printf("\n");
}
int main(void){
int x;
x = 1;
show_byte((byte_pointer) x);
}
为什么我会出现段错误?我对 C 的了解相当有限,所以请不要犹豫,指出对您来说显而易见的错误。
编辑:忘记了主要功能。
您正在将非指针值转换为指针:(byte_pointer) x
然后取消引用它,这是行不通的。尝试获取 x
的地址并将其转换为:(byte_pointer) &x
。
进行此更改,您的程序将 运行,但请注意,将 int 转换为 unsigned char 可能会导致信息丢失,因为 unsigned char 是比 int 更窄的类型(在大多数实现中).
设置 x = 255
将产生 11111111
而设置 x = 256
将产生 00000000
.
我正在阅读一本名为《计算机系统:程序员的视角》的书,以深入了解现代计算机的内部工作原理。
今晚我试图查看 int 和 unsigned 的内部,看看它们是由什么组成的。我想到了这个:
#include <stdbool.h>
#include <stdio.h>
typedef unsigned char * byte_pointer;
void bp2b(byte_pointer bp, bool bits[8]){
unsigned char n;
for (n = 0; n<8; n++){
if (*bp & (1 << n))
bits[7-n] = true;
else bits[7-n] = false;
}
}
void show_byte(byte_pointer bp){
int ind;
bool bits[8];
bp2b(bp, bits);
for (ind = 0; ind < 8; ind++){
printf("%d",bits[ind]);
}
printf("\n");
}
int main(void){
int x;
x = 1;
show_byte((byte_pointer) x);
}
为什么我会出现段错误?我对 C 的了解相当有限,所以请不要犹豫,指出对您来说显而易见的错误。
编辑:忘记了主要功能。
您正在将非指针值转换为指针:(byte_pointer) x
然后取消引用它,这是行不通的。尝试获取 x
的地址并将其转换为:(byte_pointer) &x
。
进行此更改,您的程序将 运行,但请注意,将 int 转换为 unsigned char 可能会导致信息丢失,因为 unsigned char 是比 int 更窄的类型(在大多数实现中).
设置 x = 255
将产生 11111111
而设置 x = 256
将产生 00000000
.