gpt4 book ai didi

c - 指针取消引用 = 程序崩溃

转载 作者:行者123 更新时间:2023-12-04 10:44:12 26 4
gpt4 key购买 nike

unsigned int *pMessageLength, MessageLength;
char *pszParsePos;

...
//DATA into pszParsePos
...

printf("\nMessage Length\nb1: %d\nb2: %d\nb3: %d\nb4: %d\n",
pszParsePos[1],pszParsePos[2],pszParsePos[3],pszParsePos[4]);

pMessageLength= (unsigned int *)&pszParsePos[1];

MessageLength = *((unsigned int *)&pszParsePos[1]);

//Program Dies

输出:

Message Lengthb1: 0b2: 0b3: 0b4: 1

我不明白为什么这会导致我的程序崩溃。有人可以解释一下,或者至少建议一种不会崩溃的替代方法吗?

感谢您的宝贵时间!

最佳答案

总线错误意味着您正在尝试访问对齐方式不正确的数据。具体来说,处理器似乎要求 int 比任何地方都更严格地对齐,如果你的 *pszParsePos 对齐,比如 int 边界(这取决于你如何初始化它,但会发生,例如,如果你使用 malloc),可以肯定 &pszParsePos[1] 不是。

解决此问题的一种方法是显式构造 MessageLength,即类似于

MessageLength = (pszParsePos[1] << 24) | (pszParsePos[2] << 16) | (pszParsePos[3] << 8) | pszParsePos[4]

(或者相反,如果它应该是小端)。如果您真的想输入双关语,请确保您访问的指针正确对齐。

关于c - 指针取消引用 = 程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com