У меня проблемы с пониманием ошибки Valgrind, отображаемой при компиляции программы на C ++ для создания и управления трехмерным массивом.
Я запрограммировал программное обеспечение на своем Mac, и все выглядело нормально, но когда я портировал его на Ubuntu, я не только получаю ошибку Valgrind, но и вывод (и неверный) выводится на Mac.
Вот ошибка Valgrind:
==10705== Invalid write of size 4
==10705== at 0x401095: Matrice3D<int>::Matrice3D(unsigned int, unsigned int, unsigned int, int const&) (in /media/psf/sharedFolder/Progetto_2/main.exe)
==10705== by 0x400BE1: main (in /media/psf/sharedFolder/Progetto_2/main.exe)
==10705== Address 0x5ab6e10 is 0 bytes after a block of size 192 alloc'd
==10705== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==10705== by 0x40102E: Matrice3D<int>::Matrice3D(unsigned int, unsigned int, unsigned int, int const&) (in /media/psf/sharedFolder/Progetto_2/main.exe)
==10705== by 0x400BE1: main (in /media/psf/sharedFolder/Progetto_2/main.exe)
==10705==
--10705-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--10705-- si_code=1; Faulting address: 0x1105AB6E38; sp: 0x802ca9e30
и указанный конструктор:
Matrice3D(unsigned int height, unsigned int width, unsigned int depth, const T &value) : _3D_matrix(0), _height(0), _width(0), _depth(0) {
try {
_3D_matrix = new T[height * width * depth];
for (int z = 0; z < depth; z++) {
for (int j = 0; j < height; j++) {
for (int k = 0; k < width; k++) {
_3D_matrix[j * height * depth + k * depth + z] = value;
}
}
}
}
catch(...) {
delete[] _3D_matrix;
throw;
}
_height = height;
_width = width;
_depth = depth;
}
У кого-нибудь был подобный опыт?Я делаю что-то неправильно?Заранее спасибо!