[英]When incrementing pointer to struct array on powerPC sizeof does not work as expected
我正在為運行PowerPC並使用powerpc-eabi-gcc編譯器的自定義嵌入式平台編寫代碼。
我的導致我出現問題的代碼如下:
結構聲明如下:
typedef struct
{
..lots of floats
} AGA8_Inputs;
聲明數組:
AGA8_Inputs* AGA8InputsArray;
int* calcStepArray;
void init(){
AGA8InputsArray = malloc(streamNumbers*sizeof(AGA8_Inputs));
calcStepArray = malloc(streamNumbers*sizeof(int));
memset(AGA8InputsArray, 0, streamNumbers*sizeof(AGA8_Inputs));
memset(calcStepArray, 0, streamNumbers*sizeof(int));
當streamNumber> = 1時,在這里發生問題:
int FlowCalculation(int streamNumber)
{
// Perform AGA8 calculations
AGA8_Inputs *AGA8Inputs = (AGA8InputsArray + sizeof(AGA8_Inputs) * streamNumber);
int *calcStep = calcStepArray + sizeof(AGA8_Outputs) * streamNumber;
當我訪問AGA8_Inputs-> element或* calcStep == 0時,出現數據訪問沖突
現在,當我執行以下操作時問題就消失了:
AGA8_Inputs *AGA8Inputs = AGA8InputsArray;
int *calcStep = calcStepArray;
AGA8Inputs += streamNumber;
calcStep += streamNumber;
sizeof(AGA8_Inputs)* streamNumber是否應該做與+ = streamNumber完全相同的事情? 還是這是PowerPC編譯器的一個奇怪的怪癖?
這行:
AGA8_Inputs *AGA8Inputs = (AGA8InputsArray + sizeof(AGA8_Inputs) * streamNumber);
應該:
AGA8_Inputs *AGA8Inputs = (AGA8InputsArray + streamNumber);
AGA8InputsArray
是一個指針,因此AGA8InputsArray
添加一個整數將執行指針算術運算。 給指針加1
會使指針指向其類型的下一個對象,依此類推。
calcStep
行具有類似的修復方法。
注意 可以使用calloc
函數代替memset
后面的malloc
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.