1
C-初级问题:崩溃而类型转换指针 - Visual C
我有下面的代码崩溃在行unsigned long rdwValue = *((unsigned long*)pParamPtr);
。我交叉编译使用GCC
unsigned char* pParamPtr = GetNvParamRamAddress(ParameterId, swIndex);
if (0 != pParamPtr)
{
unsigned long rdwValue = *((unsigned long*)pParamPtr);// CRASHES
}
在Fedora机器上的MIPS32目标代码,但如果我改变if
里面的线
rdwValue = *(pParamPtr);
这个工程。
我对这个类型转换规则做了些什么?
我需要的是从pParamPtr
开始的地址得到一个四字节的[无符号长整数是4个字节]到rdwValue。
难道是memcpy
要走的路吗?
我交叉编译使用GCC一个Fedora机器上的MIPS32目标的代码。如果我不允许这样做,你能提出一个解决办法吗? – NeonGlow 2013-02-27 10:04:05
这真是太棒了。谢谢。 :) – NeonGlow 2013-02-27 10:08:04
正如unwind所说,当您访问内存时,您需要使用与您使用的存储类型的大小对齐的地址。见例如[这里](http://en.wikibooks.org/wiki/MIPS_Assembly/MIPS_Instructions)和[这里](http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/addr.html ) – Michael 2013-02-27 10:08:33