Размер массива времени выполнения - Xcode - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть следующий кусок кода в Xcode. Я разрабатываю этот код для встроенного приложения, поэтому стараюсь избегать использования malloc.

void checkForFaults(char seqToCheck[], int bytesInSequence, int bitsSet)
{
    int i;
    int count = 0;
    unsigned int faultPositions[bitsSet];
    int position = 0;
    int pos = 0;
    int j;
    int a;
    for(i=bytesInSequence-1;i>=0;i--)
    {
         unsigned char faultsAt[countBitsSet(seqToCheck[i])];
         detectFaults(seqToCheck[i], faultsAt, 0);
         count = countBitsSet(seqToCheck[i]);
         j=0;
         while(j<count)
         {
              a = position*8 + faultsAt[j];
              faultPositions[pos] = a;
              printf("%d ",faultPositions[pos]);
              pos++;
              j++;
         }
    position++;
    }
    printf("Faults At: ");
    for(i=0;i<bitsSet;i++)
    {
        printf("%d\n",faultPositions[i]);
    }
}

Вот что делает этот код: он находит позиции единиц в битовом массиве (seqToCheck[]. Он делает это, вызывая detectFaults побайтово-байтово. detectFaults возвращает небольшой массив который содержит позиции единиц в байте, который был ему передан - он возвращает эти значения в массиве * 1007. * Затем эта функция смещает эти позиции и устанавливает истинную позицию единиц в массиве faultPositions. у данных, которые я ввожу, есть «1» в позициях 8, 24 и 28.

Вы заметите, что я определяю размер faultPositions во время выполнения. Если я выберу LLVM, первый оператор printf напечатает: 8, 24 и 28 - что правильно. Второе утверждение printf печатает «32, 24 и 28», что меня озадачило. Если я изменю компилятор на GCC4.2, оба оператора printf выдают 8,24 и 28.

В целом, это не касается меня. Код предназначен для AVR-GCC, поэтому там должно быть все в порядке (надеюсь), но я все еще был в замешательстве и хотел знать, почему это происходит.

...