C++ valgrind检测到内存泄漏,但找不到忘记释放的线路
这里是代码的简化版本,我删除了所有与问题无关的内容C++ valgrind检测到内存泄漏,但找不到忘记释放的线路,c++,memory-leaks,valgrind,C++,Memory Leaks,Valgrind,这里是代码的简化版本,我删除了所有与问题无关的内容 #include <iostream> #define N 3 int main() { int *input; int **cl; input = new int[N]; cl = new int*[N]; for(int i = 0; i < N; i++) { cl[i] = new int[N]; } for(int i = 0; i &
#include <iostream>
#define N 3
int main() {
int *input;
int **cl;
input = new int[N];
cl = new int*[N];
for(int i = 0; i < N; i++) {
cl[i] = new int[N];
}
for(int i = 0; i < N; i++) {
delete[] cl[i];
}
delete[] cl;
delete[] input;
return 0;
}
我刚刚开始学习C++,可能有一些我看不到的愚蠢错误。
例如,我知道我应该检查分配时是否没有“内存不足”错误,但我忽略了它,以便代码更清晰。我也知道我可以使用例如vector,不关心分配,但我仍然担心我做错了什么。C++为您提供了封装内存管理的工具
#include <iostream>
#include <vector>
int main() {
// read the size for the vectors
int n;
std::cin >> n >> '\n';
// allocate vector with n elements
auto input = std::vector<int>{n};
// read the elements
for(int i = 0; i < n; i++) {
std::cin >> std::setw(1) >> input[i];
}
// print them
for(const auto& d : input) {
std::cout << d << std::endl;
}
// allocate the vectors and store 1 in each field.
auto Cl = std::vector<std::vector<int>>{n, std::vector<int>{n, 1}};
auto Cr = std::vector<std::vector<int>>{n, std::vector<int>{n, 1}};
return 0;
// will safely release all the memory here.
}
#包括
#包括
int main(){
//读取向量的大小
int n;
标准::cin>>n>>'\n';
//用n个元素分配向量
自动输入=标准::向量{n};
//阅读元素
对于(int i=0;i>std::setw(1)>>输入[i];
}
//打印出来
用于(常数自动&d:输入){
std::cout现在您已经添加了valgrind输出,这显然是与这里有答案的问题相同的问题:
简单地说,不是您的代码导致了该报告。您可以从main()
中删除所有内容,然后返回,valgrind仍然会给您该漏洞
阅读关于该问题的公认答案以获得解释。最终您将学习c++
,而不必处理此问题。.看起来是正确的,但这就是为什么如果可以,最好避免手动内存管理。@sashoalm new和delete通常只包装malloc和free。@NathanOliver是的,但OP交替使用它们是一个不好的选择ign.@πάνταῥεῖ 如果OP想学习动态内存分配的基础知识,这是一个很好的方法。在这个行业中,有一些时刻你必须处理旧的C++代码,并且必须知道它是如何工作的。这不是OP的目的。
#include <iostream>
#include <vector>
int main() {
// read the size for the vectors
int n;
std::cin >> n >> '\n';
// allocate vector with n elements
auto input = std::vector<int>{n};
// read the elements
for(int i = 0; i < n; i++) {
std::cin >> std::setw(1) >> input[i];
}
// print them
for(const auto& d : input) {
std::cout << d << std::endl;
}
// allocate the vectors and store 1 in each field.
auto Cl = std::vector<std::vector<int>>{n, std::vector<int>{n, 1}};
auto Cr = std::vector<std::vector<int>>{n, std::vector<int>{n, 1}};
return 0;
// will safely release all the memory here.
}