当我遇到内存访问错误时,我正在使用一些 openFrameworks 示例。经过一天缩小问题的范围后,我有一个相当小的相对纯 C++ 代码示例,它仍然会导致内存访问错误。我会在这里发布整个内容,因为它很短。
共有三个文件:testApp.cpp、main.cpp 和 testApp.h。
测试应用程序.h:
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class X {
public:
X();
virtual ~X();
private:
vector<string> vertices;
vector<string> colors;
vector<string> normals;
vector<string> texCoords;
vector<string> indices;
bool bVertsChanged, bColorsChanged, bNormalsChanged, bTexCoordsChanged, bIndicesChanged;
int mode;
string name;
bool useColors;
bool useTextures;
bool useNormals;
};
class testApp{
public:
void setup();
X x1;
X x2;
vector<string> stroke;
};
测试应用程序.cpp:
#include "testApp.h"
X::X() {}
X::~X() {}
void testApp::setup(){
std::cout << stroke.size() << std::endl;
}
主.cpp:
#define _GLIBCXX_DEBUG
#include "testApp.h"
int main( ){
testApp* o = new testApp();
o->setup();
std::cout << o->stroke.size() << std::endl;
}
为了编译,我输入:g++ -o testApp testApp.cpp main.cpp
. (我正在使用带有股票 g++ 编译器版本 4.6.3、x86_64 架构的 Ubuntu 12.04)。当我运行它时,我得到这个输出:
18446744073709025734
0
第一个数字来自调用 testApp::setup,它打印出 stroke.size()(这显然是不正确的)。第二个数字来自直接打印 stroke.size() 。似乎存在某种内存问题,但我不知道从哪里开始,或者在哪里提交错误。
这似乎只在 testApp 类被完全指定时才会发生。如果您注释掉单个向量(甚至是布尔值),问题就会消失。如果您注释掉,问题也会消失_GLIBCXX_DEBUG
,但该标志应该是良性的 AFAIK。有什么建议吗?我应该在哪里提交错误?还是有什么明显的我忽略了?
另外,有人介意在他们自己的计算机/编译器上尝试这个,看看他们是否遇到同样的问题吗?