内存泄漏问题
Issue with memory leak
我正在尝试创建一个可以渲染网格的路径跟踪器,但在尝试构建一个简单的边界体积层次时遇到了问题,这将帮助我遍历网格并提高性能。然而,我遇到了一个问题,每当我试图递归地划分网格中的顶点时(我想最终构建一个bvh(,它都会导致内存泄漏,并链接到一个cpp文件"new_scalar.cpp",告诉我存在堆栈溢出。
为了解决这个问题,我创建了另一个项目,其中我有一个存储浮点指针向量的节点,每当我调用分区时,它都会创建两个新节点,每个节点都有一半的分裂向量,这在某种程度上模拟了构建bvh的递归性质。然后我在试图解决它时遇到了同样的问题,我不明白为什么。
#include <iostream>
#include <vector>
#include <ctime>
#define print(x) std::cout << x << std::endl;
struct Node {
std::vector<float*> Numbers;
Node* LeftNode;
Node* RightNode;
void Partition() {
if (Numbers.size() > 4) {
// Find center
float min = HUGE_VALF;
float max = -HUGE_VALF;
for (int i = 0; i < Numbers.size(); i++) {
min = fmin(min, *Numbers[i]);
max = fmax(max, *Numbers[i]);
}
float center = (min + max) * 0.5f;
// Partitioning
LeftNode = new Node;
RightNode = new Node;
for (int i = 0; i < Numbers.size(); i++) {
if (*Numbers[i] < center) {
LeftNode->Numbers.push_back(Numbers[i]);
}
else {
RightNode->Numbers.push_back(Numbers[i]);
}
}
LeftNode->Partition();
RightNode->Partition();
}
}
};
struct Object {
Node* Root;
void BuildBVH(std::vector<float*> numbers) {
Root = new Node;
Root->Numbers = numbers;
Root->Partition();
}
};
int main()
{
srand(std::clock());
// Initialize vector
std::vector<float*> numbers;
for (int i = 0; i < 100000; i++) {
float* newNumber = new float;
*newNumber = ((float)(rand() % 1000000) / 1000000.0f) * 2.0f - 1.0f;
numbers.push_back(newNumber);
}
Object object;
object.BuildBVH(numbers);
}
在函数Partition
中,递归调用Partition
:
LeftNode->Partition();
RightNode->Partition();
每当您在C++中调用函数时,返回地址(和任何参数(都会被推送到堆栈中。C++堆栈大小从几千字节到几兆字节不等,但并不是为深度递归而设计的。因此,您不希望递归调用Partition
100000次。也许把它重构成一个循环?
您将100000个浮点推送到numbers
,然后在这些浮点上调用Partition()
。Partition()
一次又一次地调用双方的Partition()
(直到Numbers
小于4
,这仍然需要一段时间(。您的递归次数太多,导致调用堆栈溢出。
旁注:停止像这样使用new
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 内存泄漏问题
- 我在内存泄漏和字符串方面遇到了一个非常奇怪的问题
- 存在内存泄漏问题的链接列表
- 使用 CRT 库 - _CrtDumpMemoryLeaks() 问题的托管C++C++内存泄漏
- 如何解决C++代码中的内存泄漏问题
- 检查内存泄漏问题
- 解决将对象传递给抛出的函数时可能出现的内存泄漏问题
- 此代码是否会导致内存泄漏问题
- 'Resource Acquisition Is Initialization'解决内存泄漏问题
- C++:这个代码有什么问题吗?它编译得很好,但人们告诉我会有内存泄漏
- 在简单的哈希表中解决内存泄漏和语法问题
- 内存泄漏/瓦尔格林德问题
- 程序的内存使用量随着时间的推移而增加,但内存泄漏工具报告没有问题
- 如果对象将在消息处理程序中使用,如何解决内存泄漏问题
- C++内存泄漏问题
- C++中管理内存泄漏的问题
- 问题与OpenCV 3.0 -录制视频内存泄漏
- 内存泄漏问题c++程序