首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ -在main()函数内定义变量时出现问题

C++ -在main()函数内定义变量时出现问题
EN

Stack Overflow用户
提问于 2014-03-05 18:00:58
回答 1查看 305关注 0票数 7

我正在尝试从C++的外部库Visual Studio2010中定义一个变量。只有当我把它放在main函数之外时,它才能起作用。

此代码崩溃:

代码语言:javascript
运行
复制
#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函数之外,它的工作没有任何问题:

代码语言:javascript
运行
复制
#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;
}

你有没有我该怎么解决这个问题?我假设它是由某种链接问题引起的。

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

代码语言:javascript
运行
复制
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的访问冲突。

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 19:04:26

在我的机器™上工作。

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

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

代码语言:javascript
运行
复制
class Foo
{
#ifdef FOO_DEBUG
    int debug_variable;
#endif
    int variable;
};

库函数:

代码语言:javascript
运行
复制
void bar(Foo& foo)
{
    std::cout << foo.variable;
}

和客户端代码:

代码语言:javascript
运行
复制
Foo foo;
foo.variable = 666;
bar(foo);

如果客户端和库之间的FOO_DEBUG不同步,这可能会崩溃和烧录-- variable将具有不同的预期偏移量。

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

  • 您已经使用与您的代码不同的编译器构建了ogdf
  • 如果没有,您的ogdf和您的代码具有不同的构建配置(发布和调试)
  • 两者都是调试的,但是您已经定义了对齐(按照建议,ogdf具有不同的"Struct OGDF_DEBUG“设置
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22194389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档