当我遇到内存访问错误时,我正在使用一些openFrameworks示例.经过一天缩小问题的时间后,我有一个相对纯粹的C++代码的相当小的样本仍然导致内存访问错误.我会在这里发布所有内容,因为它很短.
有三个文件:testApp.cpp,main.cpp和testApp.h.
testApp.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;
};
Run Code Online (Sandbox Code Playgroud)
testApp.cpp:
#include "testApp.h"
X::X() {}
X::~X() {}
void testApp::setup(){
std::cout << stroke.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#define _GLIBCXX_DEBUG
#include "testApp.h"
int main( ){
testApp* o = new testApp();
o->setup();
std::cout << o->stroke.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
为了编译,我输入:g++ -o testApp testApp.cpp main.cpp.(我正在使用Ubuntu 12.04和库存g ++编译器版本4.6.3,x86_64架构).当我运行它时,我得到这个输出:
18446744073709025734
0
Run Code Online (Sandbox Code Playgroud)
第一个数字来自调用testApp :: setup,它打印出stroke.size()(显然是不正确的).第二个数字来自直接打印stroke.size().似乎存在某种内存问题,但我不知道从哪里开始,或者在哪里提交错误.
这似乎只有在指定testApp类时才会发生.如果你注释掉一个向量(甚至是一个bool),问题就会消失.如果你注释掉这个问题也会消失_GLIBCXX_DEBUG,但那个标志应该是良性的AFAIK.有什么建议?我应该在哪里提交错误?还是有一些我忽略的明显事物?
此外,有人会介意在他们自己的计算机/编译器上尝试这个,看看他们是否得到同样的问题?
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |