C 指针设置为地址,但莫名其妙地指出了程序的不同部分中的不同值
C++ pointer set to address, but inexplicably points to different values in different parts of program
我正在尝试使用指针toRender
在我的射线播放程序中存储最接近三角形的地址。我的第一个打印语句表明它正在工作:打印1,这是最接近三角形的toRender->color.x
的正确值。但是,一旦程序进入下一个打印语句,它将为toRender->color.x
打印0。这是另一个三角形的颜色值,但重要的是,该像素并未相交的三角形(外部循环的迭代(,第一个cout
并未打印为该像素的0。当我调试代码时,尽管toRender->color.x
在两个打印语句上给出了不同的值,但分配给toRender
的地址保持不变。我不知道该如何考虑。
我不确定它是否相关,但是world
是一个函数参数:const std::vector<Triangle>& world
,Triangle
是struct。
float minDist = 1000; // distance to closest sphere
Triangle* toRender;
// check for intersection with each triangle in the world
for (Triangle triangle : world) {
// distance to triangle
double distTo;
// distTo is set in intersectTriangle
if(intersectTriangle(ray, triangle, distTo)){
// set new minDist if closest
if (distTo < minDist){
minDist = distTo;
toRender = ▵
cout << toRender->color.x << endl;
}
}
}
// don't render anything farther than 1000 away
if(minDist < 1000) {
cout << toRender->color.x << endl;
// get color from closest shape
double red = toRender->color.x * 255;
double green = toRender->color.y * 255;
double blue = toRender->color.z * 255;
// set color
color = make_colour(red, green, blue);
}
triangle
是包含容器中对象的 copy 的变量,该变量范围为循环。它不存在在循环外部,因此您分配给toRender
的指针指向循环后的一个破坏对象。那是不确定的行为。
如果您打算使用triangle
参考中的对象 中的对象而不是为一个副本,则将其作为参考(auto& triangle : ...
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 为什么我的程序写入.dat文件中的同一行
- 无法理解此程序中用于检查自同构编号的错误?
- 多个WT应用程序可以在同一端口上运行吗?
- c++程序中如何在类中创建同一类的实例