0

以下代码在 Code::Blocks 中编译和运行,但在 VS2010 中出现问题和错误:“test2.exe 中 0x770815de 处的未处理异常:0xC0000005:写入位置 0x00000002 的访问冲突。”

我意识到代码有点危险,它基本上是对我为另一个项目的想法进行原型设计。我想要做的是传递对任何给定数量的整数的引用,后跟一个值。然后将此值放入引用的整数中,鲍勃就是你的叔叔。它有效,这很好。但不是在困扰我的 VS2010 中。我不是最有经验的指针,所以不知道是我做错了什么还是只是这种操作不是VS2010喜欢的。这是一个问题,因为我正在测试的项目都在 VS2010 中!所以我需要这个来工作!

编辑:对不起,我是 Code:Blocks 的新手。我想我应该指定我在 Code::Blocks 中使用的编译器?:DI 使用 GNU GCC 编译器(或类似的东西)的 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 回答