我正在尝试从C++的外部库Visual Studio2010中定义一个变量。只有当我把它放在main函数之外时,它才能起作用。
此代码崩溃:
#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;}
调用堆栈:

输出为:graphs.exe中0x0126788f处的第一次机会异常: 0xC0000005:访问冲突写入位置0x00000000。
Graphs.exe中0x0126788f处的未处理异常: 0xC0000005:写入位置0x00000000的访问冲突。
发布于 2014-03-05 19:04:26
在我的机器™上工作。
像这样的深奥错误通常是二进制不可兼容的结果。基本上,由于不同的编译器/预处理器选项,您的代码和库“看到”的有效头文件是不同的。
例如,如果您有一个包含以下头代码的库:
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不同步,这可能会崩溃和烧录-- variable将具有不同的预期偏移量。
在您的情况下,我怀疑以下情况之一可能是真的:
OGDF_DEBUG“设置https://stackoverflow.com/questions/22194389
复制相似问题