C++ - 在 main() 函数中定义变量时遇到问题

标签 c++ variables ogdf

我正在尝试从 C++ Visual Studio 2010 中的外部库定义一个变量。只有当我将它放在主函数之外时它才有效。

此代码崩溃:

#include "StdAfx.h"
#include <ogdf\basic\Graph.h>
#include <ogdf\basic\graph_generators.h>

int main()
{
   ogdf::Graph g;
   ogdf::randomSimpleGraph(g, 10, 20);
   return 0;
}

它给了我一个未处理的异常:访问冲突。 但是,如果它在 main 函数之外,它可以正常工作:

#include "StdAfx.h"
#include <ogdf\basic\Graph.h>
#include <ogdf\basic\graph_generators.h>

ogdf::Graph g;

int main()
{
   ogdf::randomSimpleGraph(g, 10, 20);
   return 0;
}

你有什么办法解决这个问题吗?我假设它是由某种链接问题引起的。

编辑:看起来问题不在于变量的初始化。当应用程序退出时,它会抛出异常。

int main()
{
ogdf::Graph g; // No problem
ogdf::randomSimpleGraph(g, 10, 20); // No problem
int i; // No problem
std::cin>>i; // No problem
return 0;    // Throws an exception after read i;

调用堆栈:Call STack

输出是: graphs.exe 中 0x0126788f 处的第一次机会异常:0xC0000005:访问冲突写入位置 0x00000000。

graphs.exe 中 0x0126788f 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000000。

最佳答案

在我的机器上工作™。

像这样的深奥错误通常是二进制不兼容的结果。基本上,由于不同的编译器/预处理器选项,您的代码和库“看到”的有效 header 是不同的。

例如,如果您有一个包含以下 header 代码的库:

class Foo
{
#ifdef FOO_DEBUG
    int debug_variable;
#endif
    int variable;
};

库函数:

void bar(Foo& foo)
{
    std::cout << foo.variable;
}

和客户端代码:

Foo foo;
foo.variable = 666;
bar(foo);

如果 FOO_DEBUG 在客户端和库之间不同步,这可能会崩溃和燃烧——变量 将有不同的预期偏移量。

在您的情况下,我怀疑以下情况之一可能是正确的:

  • 您使用与您的代码不同的编译器构建了 ogdf
  • 如果不是,则您的 ogdf 和您的代码具有不同的构建配置(发布与调试)
  • 两者都是调试的,但您已经定义了OGDF_DEBUG(推荐here)
  • 您有不同的“结构成员对齐”设置

关于C++ - 在 main() 函数中定义变量时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22194389/

相关文章:

C++ 风格的 vector - 指针数组还是数组?

c - 为什么 fgetc() 返回 int 而不是 char?

c++ - 静态库 (OGDF) 中体系结构的 undefined symbol

c++ - 在OGDF中设置节点边界框​​大小

c++ - 访问派生类中 protected 成员函数——段错误

c++ - 第一次毁灭从何而来?

c++ - 如何插入 `std::map<string, double>* myMap`?

c++ - 包含构建和源代码子目录的 Makefile

C++在递增unsigned long int时崩溃

javascript - 何时使用 this.var 和 var = ;在 javascript 函数 obj 中?