簡體   English   中英

當在powerPC sizeof上遞增指向結構數組的指針時,無法按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM