Sockety a neinicializovaná paměť

asd

Sockety a neinicializovaná paměť
« kdy: 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.
« Poslední změna: 30. 12. 2011, 20:03:16 od Petr Krčmář »


Sten

Re:Sockety a neinicializovana pamat
« Odpověď #1 kdy: 29. 12. 2011, 17:17:41 »
Co třeba ta část bufferu, která se nepoužije?

asd

Re:Sockety a neinicializovana pamat
« Odpověď #2 kdy: 29. 12. 2011, 17:18:55 »
takze pred memcpy pouzit memset a nastavit vsetko na napr 0?

Sten

Re:Sockety a neinicializovana pamat
« Odpověď #3 kdy: 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á.

megahu

Re:Sockety a neinicializovana pamat
« Odpověď #4 kdy: 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);
}