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