分段错误或可疑指针到指针转换(区域太小)

时间:2015-05-28 16:17:32

标签: c pointers gcc segmentation-fault

long keyIntValue;
uint8_t *value; 

sscanf(buffer, " %*[^\"\n]\"%9[^;\"\n]", keyStringValue);
keyIntValue = strtol(keyStringValue, NULL, 16);
*value = *(uint8_t*)keyIntValue;
printf("The value is 0x%x \n", *value);

我使用GCC编译器

获得上述代码的分段错误
*(long *)value = keyIntValue;
 printf("The value is 0x%x \n", *(long *)value);

上面的代码与gcc一起使用并获得正确的输出但是我得到了bitbake编译器的可疑指针到指针转换(区域太小)

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

*value = *(uint8_t*)keyIntValue;

取消引用未初始化的指针会导致未定义的行为,从而导致分段错误。

答案 1 :(得分:1)

如果您希望将keyIntValue的一部分视为uint8_t,则可以采用keyIntValue的地址来执行此操作,如下所示:

unsigned char *value;
value = (unsigned char*)(&keyIntValue);
printf("The value is 0x%x \n", *value);

注意:我将value的类型更改为指向unsigned char的原因是为了避免违反严格别名规则。允许字符类型的指针对任何内容进行别名,因此更改类型可以修复别名问题。