Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: asd 29. 12. 2011, 16:43:14

Název: Sockety a neinicializovaná paměť
Přispěvatel: asd 29. 12. 2011, 16:43:14
Zdravim,

dostavam takyto error od valgrindu:
Kód: [Vybrat]
==5091== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
...backtrace...
==5091==  Address 0x7fefffc5c is on thread 1's stack
==5091==  Uninitialised value was created by a stack allocation
==5091==    at 0x406856: Server::sendObjectCount(unsigned long) (Server.cpp:82)

osekana funkcia sendObjectCount:
Kód: [Vybrat]
void Server::sendObjectCount(size_t size)
{ // <- riadok 82
    PacketHeader ph(PACKET_OBJECT_COUNT, &size, sizeof(size_t));
    m_networkManager->send(&ph, sizeof(PacketHeader));
}

konstruktor PacketHeaderu:
Kód: [Vybrat]
PacketHeader::PacketHeader(const PACKET_TYPE_ID type, const void * data, size_t len)
{
    m_type = type;
    memcpy(m_buffer, data, len);
}

m_type a m_buffer su jedine clenske premenne PacketHeaderu takze vobec neviem co ineho by tam mohlo byt neinicializovane.


Predom dakujem za odpovede.
Název: Re:Sockety a neinicializovana pamat
Přispěvatel: Sten 29. 12. 2011, 17:17:41
Co třeba ta část bufferu, která se nepoužije?
Název: Re:Sockety a neinicializovana pamat
Přispěvatel: asd 29. 12. 2011, 17:18:55
takze pred memcpy pouzit memset a nastavit vsetko na napr 0?
Název: Re:Sockety a neinicializovana pamat
Přispěvatel: Sten 29. 12. 2011, 19:30:47
takze pred memcpy pouzit memset a nastavit vsetko na napr 0?

To bych používal jenom pro ladění ve valgrindu. To, že ta paměť není inicializovaná, nemusí být problém (zde není, stejně ji nepotřebujete), ale valgrind to nijak nepozná.
Název: Re:Sockety a neinicializovana pamat
Přispěvatel: megahu 29. 12. 2011, 20:45:43
Valgrind jsem moc nepouzival (na projekty s gtk je, bohuzel, nepouzitelny), ale pokud je PACKET_TYPE_ID nejakej enum nebo typedef k vestavenymu typu, nemel bys m_type inicializovat v inicializacnim seznamu? Tzn. neco jako

Kód: [Vybrat]
PacketHeader::PacketHeader(const PACKET_TYPE_ID type, const void * data, size_t len) : m_type(type)
{
    memcpy(m_buffer, data, len);
}