OCTREE.exe中0x1000bbae处未处理的异常:0xC0000005:写入位置0x000000a8时发生访问冲
Unhandled exception at 0x1000bbae in OCTREE.exe: 0xC0000005: Access violation writing location 0x000000a8
我在下面的代码行中得到了上面的运行时错误:
glutMainLoop();
为什么?
#include <stdio.h>
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cassert>
#include <math.h>
#include <gl/glut.h>
#include <stdlib.h>
class Vertex {
public: float X;
float Y;
float Z;
public: Vertex (float first, float second, float third){
X=first;
Y=second;
Z=third;
}
};
using namespace std;
vector <Vertex> vertexCoordinates;
vector <vector<int>> faces;
vector <vector<float>> faceNormals;
vector <vector<float>> faceCenters;
void loadOff(string inputFileName) {
int vertexCount; int faceCount; int edgeCount;
ifstream inputFileStream;
inputFileStream.open(inputFileName.data());
assert(inputFileStream.is_open());
string actualLine;
inputFileStream>>vertexCount;
inputFileStream>>faceCount;
inputFileStream>>edgeCount;
for (int loadVertexIndex=0; loadVertexIndex<vertexCount; loadVertexIndex++){
float X;
float Y;
float Z;
inputFileStream>>(float)X;
inputFileStream>>(float)Y;
inputFileStream>>(float)Z;
vertexCoordinates.push_back(Vertex(X,Y,Z));
if(inputFileStream.eof())break;
}
for (int faceIndex=0; faceIndex<=faceCount; faceIndex++){ //<= faceCount?
string line;
getline(inputFileStream, line);
istringstream actualLineStream(line);
std::vector<int> face((std::istream_iterator<int>(actualLineStream)),
std::istream_iterator<int>());
faces.push_back(face);
}//end for faceCount
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glutSwapBuffers();
glutPostRedisplay();
}
void init(){
//loadOff("spider.off");
//BLACK BACKGROUND
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glPolygonMode(GL_BACK, GL_LINE);
glPolygonMode(GL_FRONT, GL_LINE);
}
void reshape(int w, int h) {
glViewport (0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(0.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f);
glMatrixMode(GL_MODELVIEW);
}
void keyboard (unsigned char key, int x, int y){
}
void specialKeys(int key, int x, int y) {
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH );
glutInitWindowSize(800,600);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
您在0x000000a8处尝试写入时遇到异常。发生的情况是,您的代码或openGL在某个地方接收到的是空指针,而不是有效指针。有问题的代码正试图以该指针的168(0xa8)偏移量更新某些内容。
我已经7年没有使用GLUT了,所以对我的答案持保留态度。也就是说,你的init()
函数让我有点担心。我认为在编写GLUT程序时,应该只在GLUT回调函数中发出OpenGL命令。我不确定在执行init()
函数时是否存在活动的OpenGL上下文。如果删除对init()
的调用,程序会崩溃吗?
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- OCTREE.exe中0x1000bbae处未处理的异常:0xC0000005:写入位置0x000000a8时发生访问冲