@warnings:
streamer.c:57:17: warning: member ‘cLiveStreamer::m_Event’ is used uninitialized [-Wuninitialized]
57 | , m_VideoInput(m_Event)
| ^~~~~~~
Der Constructor von m_VideoInput wird mit dem lokalen class member m_Event aufgerufen,
aber m_Event ist selbst noch nicht sicher erzeugt. Deswegen erst den m_Event constructor aufrufen und _dann_ den Constructor von m_VideoInput.
Falsche Reihenfolge.
g++ hat recht.
Hier wird für jeden member von (*whitelist) eine lokale Kopie innerhalb des for loop angelegt.
Das kostet Speicher und seeeehr viel Zeit, und hofft darauf, dass die Kopie wirklich alle Daten kopiert, etc.
channelfilter.c: In member function ‘void cVNSIChannelFilter::StoreWhitelist(bool)’:
channelfilter.c:188:23: warning: loop variable ‘i’ creates a copy from type ‘const cVNSIProvider’ [-Wrange-loop-construct]
188 | for (const auto i : *whitelist)
| ^
channelfilter.c:188:23: note: use reference type to prevent copying
188 | for (const auto i : *whitelist)
| ^
| &
videoinput.c:468ff
Hier gibt es gleichzeitig mehrere Probleme.
Zum einen wird von jedem member von sPool (seehr laaangsam) eine lokale Kopie im Geltungsbereich des for loop angelegt.
Das alleine garantiert nicht, dass in der Zwischenzeit aber nicht der 'echte' cDummyReceiver nicht zerstört wurde -> race.
Und zusätzlich könnte auch der shared pointer dabei sein zerstört zu werden 'expired'. Aber selbst wenn nicht, kann ja 'recv' immer noch ein NULL pointer sein.
Eigentlich haben die gcc Entwickler wirklich gute Arbeit geleistet.
Code rausgefischt mit Warnungen, der schwer zu lesen ist..
inlined from ‘static std::shared_ptr<cDummyReceiver> cDummyReceiver::Create(cDevice*)’ at videoinput.c:469:28:
/usr/include/c++/13/bits/atomic_base.h:505:31: warning: ‘unsigned char __atomic_load_1(const volatile void*, int)’ writing 1 byte into a region of size 0 overflows the destination [-Wstringop-overflow=]
505 | return __atomic_load_n(&_M_i, int(__m));
| ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
In static member function ‘static std::shared_ptr<cDummyReceiver> cDummyReceiver::Create(cDevice*)’:
cc1plus: note: destination object is likely at address zero