1

次の簡略化された関数を呼び出すと、最後のステートメントで EXC_BAD_ACCESS エラーが発生します。

void test(char *param, ...) {
  va_list vl;
  va_start(vl, param);
  double a = va_arg(vl, double);
  double b = va_arg(vl, double);
  double *result = va_arg(vl, double*);
  *result = a*b;
  va_end(vl);
}

関数は次のように呼び出されます。

double result;
test("blub", 3, 3, &result);

Xcode の clang コンパイラ (Apple LLVM コンパイラ 3.1) を使用しています。

4

1 に答える 1

4

の代わりにdoubleasを送信することに問題があると思います。法線は整数として扱われますが、ほとんどのプラットフォームでよりも大きい double を取得している関数では、間違った場所を読み取ってしまう可能性があり、 実行時シグナルが生成されます。33.03testintEXC_BAD_ACCESS

于 2012-05-10T09:25:38.233 に答える