Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ valgrind检测到内存泄漏,但找不到忘记释放的线路_C++_Memory Leaks_Valgrind - Fatal编程技术网

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.
}