我在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[]
中找到'1'的位置。它通过逐个字节地调用detectFaults
来实现。{{1返回一个小数组,其中包含传递给它的字节中'1'的位置 - 它在detectFaults
数组中返回这些值。这个函数然后偏移这些位置并放入'1'的真实位置在faultsAt
数组中。我输入的数据在位置8,24和28处有1个。
您会注意到我在运行时确定faultPositions
的大小。如果我选择LLVM,则第一个printf语句打印出来:8,24和28 - 这是正确的。第二个printf语句打印“32,24和28”让我感到困惑。如果我将编译器更改为GCC4.2,则两个printf语句都打印8,24和28。
总的来说,这与我无关。该代码针对AVR-GCC所以它应该没问题(我希望),但我仍然感到困惑,想知道为什么会发生这种情况。