2013-10-01 3 views
0

я очень смущен, почему мой код дает ошибку при выполнении проверки Valgrind памяти:Вектора с шаблоном дает ошибку в Valgrind при печати контекста

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

код прекрасно работает при компиляции и запуск. Но при запуске инструмента valgrind он дает это сообщение в конце.

ОШИБКА РЕЗЮМЕ: 170 ошибок из 9 контекстов (подавленных: 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? 
} 
+0

какой тип 'T' вы использовали для создания образца? –

+0

Если я правильно понял вопрос, то это Я решил использовать в основном. Но это первый раз, когда я использую шаблон, поэтому я мало знаю об этом. –

ответ

0

это мой результат

==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== 

резюме ошибки вы получили, я думаю, может из заголовков, которые не являются частью кода.

+0

Вы раскомментировали строку, которая вызывает 'print_values'? Это дает мне сообщенные ошибки. –

+0

нет, я не комментировал вызов print_values. –

1

Вы инициализируете свои векторные элементы перед их печатью? Это изменение в код исправило ошибки 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>(){ 

Обратите внимание, что я только получил ошибку VALGRIND, когда я раскомментировать ваш dvect.print_values() вызов.

+0

Я попытался явно дать значения элементам в векторе. Он тоже пошел без ошибок. Но ваша техника безупречна. Спасибо, мой спаситель. ;) –

Смежные вопросы