Portál AbcLinuxu, 4. května 2025 17:51
==7096== Invalid write of size 8
==7096== at 0x5CA1AA3: Trida::Trida(char const*) (Trida.cpp:17)
==7096== by 0x47D284: JinaTrida::JinaTrida(QString, QString, QWidget*) (in /cesta/program)
==7096== by 0x45AFC5: EsteJinaTrida::mujQtSLOT(trida)(QString, QString) (in /cesta/program)
==7096== by 0x45CE9E: EsteJinaTrida::EsteJinaTrida(QWidget*) (in /cesta/program)
==7096== by 0x413733: main (in /cesta/program)
==7096== Address 0x13c4c2b0 is 8 bytes after a block of size 8 alloc'd
==7096== at 0x4C2BA77: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7096== by 0x47D276: JinaTrida::JinaTrida(QString, QString, QWidget*) (in /cesta/program)
==7096== by 0x45AFC5: EsteJinaTrida::mujQtSLOT(trida)(QString, QString) (in /cesta/program)
==7096== by 0x45CE9E: EsteJinaTrida::EsteJinaTrida(QWidget*) (in /cesta/program)
==7096== by 0x413733: main (in /cesta/program)
==7096==
==7096== Invalid write of size 8
==7096== at 0x5CA1ABA: Trida::Trida(char const*) (Trida.cpp:18)
==7096== Address 0x13c4c2a8 is 0 bytes after a block of size 8 alloc'd
==7096== at 0x4C2BA77: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7096==
==7096== Invalid read of size 8
==7096== at 0x5CA1AC2: Trida::Trida(char const*) (Trida.cpp:19)
==7096== Address 0x13c4c2b0 is 8 bytes after a block of size 8 alloc'd
==7096== at 0x4C2BA77: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7096==
==7096== Invalid read of size 8
==7096== at 0x5CA1ACF: Trida::Trida(char const*) (Trida.cpp:19)
==7096== Address 0x13c4c2a8 is 0 bytes after a block of size 8 alloc'd
==7096== at 0x4C2BA77: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7096==
==7096== Invalid write of size 4
==7096== at 0x5CA1AED: Trida::Trida(char const*) (Trida.cpp:24)
==7096== Address 0x13c4c2bc is 20 bytes after a block of size 8 alloc'd
==7096== at 0x4C2BA77: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
(U většiny jsem smazal "by", protože bylo stejné, jako u prvního)
Následující kód má způsobovat chyby - je v dynamické knihovně.
class Trida {
public:
Trida(const char *archive);
virtual ~Trida();
private:
char* archive;
char* tmpDir;
int curDev;
}
Trida::Trida(const char *archive) {
tmpDir = (char*) malloc(256); //radek 17
this->archive = strdup(archive); //radek 18
if(tmpDir == NULL || this->archive == NULL) //radek 19
{
printf("\n Allocating memory failed.");
}
curDev = 0; //radek 24
srand(time(NULL));
}
Trida::~Trida() {
free(archive);
free(tmpDir);
}
V když tohle dám do samostatného programu, Valgrind si nestěžuje.
Nechápu, kde vidí Valgrind problém a jestli to je opravdu problém nebo jen falešný poplach.
Řešení dotazu:
sizeof(Trida)
? Není možné, že to linkujete proti jiné verzi knihovny, než od které máte ten hlavičkový soubor?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.