带有模板的矢量在打印上下文时在瓦尔格林德中给出错误

Vector with template gives error in Valgrind when printing the context

本文关键字:林德中 错误 出错 打印 上下文      更新时间:2023-10-16

我很困惑为什么我的代码在运行 valgrind 内存检查时出错:

valgrind --tool=memcheck --leak-check=yes ./output

代码在编译和运行时完美运行。但是当运行 valgrind 工具时,它最终会给出此消息。

错误

摘要:来自 9 个上下文的 170 个错误(已抑制:2 个上下文中的 2 个错误)

如果有人能帮助我,那就太好了。
谢谢/皮特

#include <iostream>
#include <cstdlib>
#include <list>
#include <stdexcept>
#include <algorithm>
using namespace std;
template <typename T>
class Vector{
public:
    T* p;
    size_t size;
public:
Vector<T>(){
    cout << "The default constructor" << endl;
    this-> size = 10;    // initial size
    this->    p = new T[size];
}
~Vector<T>(){
    cout << "The destructor" << endl;
    delete [] p;
}
void print_values(){
        for (unsigned i = 0; i < this->size; ++i){
            std::cout << *(this->p+i) << " ";}
        std::cout << endl;
}   
};
int main(){
Vector <double> dvect;
//dvect.print_values();   // why gives error?
}

您是否在打印矢量元素之前对其进行初始化? 对代码的更改为我修复了 valrgind 错误:

--- foo.cpp.orig    2013-10-01 09:15:30.093127716 -0700
+++ foo.cpp 2013-10-01 09:15:34.293127683 -0700
@@ -16,7 +16,7 @@
 Vector<T>(){
     cout << "The default constructor" << endl;
     this-> size = 10;    // initial size
-    this->    p = new T[size];
+    this->    p = new T[size]();
 }
 ~Vector<T>(){

请注意,当我取消注释您的dvect.print_values()电话时,我才收到 valgrind 错误。

这是我的结果

==21382==
==21382== HEAP SUMMARY:
==21382==     in use at exit: 0 bytes in 0 blocks
==21382==   total heap usage: 1 allocs, 1 frees, 80 bytes allocated
==21382==
==21382== All heap blocks were freed -- no leaks are possible
==21382==

我认为您获得的错误摘要可能来自不属于您代码的标头。