0

次のコードは Code::Blocks でコンパイルおよび実行されますが、VS2010 で問題とエラーが発生します:

私はコードが一種の危険であることを理解しています.それは基本的に私が別のプロジェクトのために持っているアイデアのプロトタイプです. 私ができるようにしたいのは、指定された数の整数への参照とそれに続く値を渡すことです。次に、この値を参照されたintに入れ、ボブはあなたの叔父です。そして、それはうまくいきます。しかし、気になるVS2010ではそうではありません。私はポインターの経験がほとんどないので、何か間違ったことをしているのか、それともこの種の操作がVS2010が好きなものではないのかわかりません。私がこれをテストしているプロジェクトはすべてVS2010であるため、これは問題です! だから私はそのために働くためにこれが必要です!

編集: 申し訳ありませんが、Code:Blocks のことは初めてです。Code::Blocks で使用するコンパイラを指定する必要があると思いますか? :DI GNU GCC Compiler (またはそのようなもの) の miniGW (または何か) 実装を使用します。Code::Blocks のユーザーを経験したあなたにとって、それが理にかなっていることを願っています!

#include <iostream>
#include <stdarg.h>

using namespace std;

void getMonkey(int Count, ... )
{
   int test;
   va_list Monkeys;
   va_start(Monkeys, Count );

   for(int i = 0; i < (Count / 2); i++ )
   {
      *va_arg(Monkeys, int*) = va_arg(Monkeys, int);
   }

   va_end(Monkeys);
}

int main()
{
   int monkey1 = 0;
   int monkey2 = 0;
   int monkey3 = 0;

   getMonkey(6, &monkey1, 2, &monkey2, 4, &monkey3, 5);

   cout << monkey1 << " " << monkey2 << " " << monkey3;
   return 0;
}
4

1 に答える 1

0

左辺値と右辺値は、私が想定した順序で評価されないことが判明しました! TYスタックオーバーフロー!

更新された getMonkey メソッド:

void getMonkey(int Count, ... )
{
   int test;
   va_list Monkeys;
   va_start(Monkeys, Count );

   for(int i = 0; i < (Count / 2); i++ )
   {
      int* tempMonkeyPtr = va_arg(Monkeys, int*); //herp
      *tempMonkeyPtr = va_arg(Monkeys, int);      //derp
   }

   va_end(Monkeys);
}

ええ!私はこのポインタービジネスのコツをつかんでいます!

于 2012-07-22T00:05:15.097 に答える