0

次のコードで、Segmentation Fault 11 が引き続き発生します。再帰と関係があると思いますが、その方法は完全にはわかりません。このメソッドは、配列を取り、奇数の値をスキップし、値だけが残っている配列ができてその値を返すまで繰り返し続ける必要があります。

ありがとう!

#include <stdio.h>

int callTable(int table[], int size)
{

  int i = 0;
  int j = 0;
  int cHeight = size / 2;

  int cTable[cHeight];

  while (i < size)
  {
    if (table[i] % 2 == 0)
    {
      cTable[j] = table[i];
      j++;
    }

    i++;
  }

  if (size > 1)
    return callTable(cTable, cHeight);

  else
    return cTable[0];

}

int main()
{

  int tPass[100];

  int i, answer;

  for (i = 0; i < 100; i++)
    tPass[i] = i + 1;

  answer = callTable(tPass, sizeof(tPass) / sizeof(tPass[0]));

  printf("%d\n", answer);
}
4

1 に答える 1

2

奇数の値または奇数のインデックスをスキップしますか? 現在、奇数の値をスキップしているため、callTableを 1 回呼び出すと、偶数の値だけが残ります。次に、2 番目の呼び出しで、半分のサイズの配列を使用して偶数の値 (すべての値) を格納しようとするため、配列全体を半分のサイズの別の配列に格納しようとします。

奇数インデックスをスキップする場合は、次の行を変更します。

if (table[i]%2==0)

これについて:

if (i%2==0)

これは正常に実行され、1 (インデックス 0 の数値) を返します。

于 2013-10-01T04:25:35.077 に答える