c++

C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll.
2
Antworten

___ answer19365033 ___

Sehen Sie sich die %code% struct:

an %Vor%

Aufgrund der Ausrichtung der Datenstruktur kann die Adresse von %code% gezwungen sein, sich an die Adresse eines Vielfachen der Wortgröße anzupassen. Daher werden mehrere nicht verwendete Bytes zwischen %code% und %code% aufgefüllt. Das sind die Bytes, die nicht initialisiert und somit von Valgrind gemeldet wurden.

Um das Problem zu umgehen, könnten Sie das Initialisieren der gesamten Struktur durch %code% erzwingen.

%Vor%     
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer19365569 ___

Obwohl @timrau ziemlich genau beschrieben hat, was das Kernproblem hier ist (Ausrichtung / Packen), bin ich kein Fan der vorgeschlagenen Lösung.

Sie haben eine %code% in Ihrem Code als %code% und %code% beschrieben. Die Größe der tatsächlichen Datenstruktur im Speicher ist jedoch nicht %code% , und das ist das Kernproblem.

Die vorgeschlagene Lösung schlägt vor, einfach alle Bits der %code% -Struktur zu löschen, bevor die wichtigen Bits eingefügt werden. Das Problem, das ich damit habe, ist sowohl ein semantischer als auch ein technischer - die Größe der Datenstruktur, die über den Draht gesendet wird, ist keine genaue Darstellung dessen, was Sie im Code modelliert haben. Mit anderen Worten, Sie senden nicht nur eine %code% und eine %code% - Sie senden eine %code% , eine %code% und einige andere cruft (padding).

Mein Vorschlag ist es, den Crust loszuwerden und nur das zu senden, was Sie in Ihrem Code modelliert haben.

Es gibt keine direkte Unterstützung in C ++, um Ausrichtung und Auffüllung auszuschalten, aber alle mir bekannten Compiler bieten einen einfachen Mechanismus, um Datenstrukturen auf %code% bytes auszurichten:

%Vor%

Dadurch wird die %code% -Datenstruktur genau , was Sie in Ihrem Code modelliert haben, ohne Auffüllung. Dadurch wird %code% unnötiger Zugriff und Sie senden genau %code% byte über die Verbindung.

    
___ tag123sockets ___ Ein Endpunkt eines bidirektionalen Interprozess-Kommunikationsflusses. Dies bezieht sich oft auf einen Prozessablauf über eine Netzwerkverbindung, ist jedoch keineswegs darauf beschränkt. Nicht zu verwechseln mit Websocket (einem Protokoll) oder anderen Abstraktionen (z. B. socket.io). ___ tag123valgrind ___ valgrind ist ein dynamisches Analysetool für Linux-, OS X-, Android- und Solaris-Systeme. Es kann zum Profilieren sowie zum Auffinden von Speicherlecks, Race-Conditions und Threading-Fehlern verwendet werden. ___ tag123memoryalignment ___ Speicherausrichtung bedeutet, dass sich Objekte und Variablen an bestimmten Offsets im Systemspeicher befinden. ___ qstntxt ___

Ich habe Valgrind verwendet, um nach Speicherlecks in meinem Code zu suchen. Obwohl keine Speicherlecks gefunden werden, werden einige Fehler gemeldet, die alle auf einer einzigen Funktion / Klassenmethode beruhen:

%Vor%

Das %code% , auf das die Fehler zeigen, ist Teil von %code% class:

%Vor%

Ich sehe nicht, was das Problem ist. Wo genau sind die nicht initialisierten Werte? Oder sollte ich einfach die von Valgrind gemeldeten Fehler ignorieren?

    
___

Ich habe Valgrind verwendet, um nach Speicherlecks in meinem Code zu suchen. Obwohl keine Speicherlecks gefunden werden, werden einige Fehler gemeldet, die alle auf einer einzigen Funktion / Klassenmethode beruhen: %Vor% Das sendMsg(const...
14.10.2013, 16:37
1
Antwort

C ++: Wie kann man reference-to-function in eine andere Funktion übergeben?

Ich habe über Funktionszeiger gelesen und sie als Parameter für andere Funktionen verwendet. Meine Frage ist, wie würden Sie eine Funktion durch Referenz ohne Zeiger übergeben? Ich habe versucht, die Antwort im Internet zu finden, aber ich habe...
22.08.2011, 03:25
1
Antwort

std :: unique_ptr mit abgeleiteter Klasse

Ich habe eine Frage zu den C ++ 11 Zeigern. Wie können Sie einen eindeutigen Zeiger für die Basisklasse in die abgeleitete Klasse verwandeln? %Vor% sollte es möglich sein, aber ich kann nicht herausfinden, wie. Jedes Mal versuche ich mit dem...
02.07.2013, 05:15
4
Antworten

Was entspricht Mathematicas Funktion Range [] in C ++?

Mathematica hat eine Funktion namens Range[] , die Folgendes ausführt: %Vor% Ant druckt: %Vor% Hat C ++ eine solche Funktion?     
17.12.2012, 03:39
2
Antworten

Was ist ein Sicherheits-Cookie in C ++?

Ich habe von Google gelesen, dass es für die Kontrolle von Pufferüberläufen auf Anwendungsebene verwendet wird und von CRT aufgerufen wird. Es sagt auch, dass "Im Wesentlichen wird der Cookie beim Eintritt in eine überlaufgeschützte Funktion...
13.11.2013, 04:43
3
Antworten

Vergleich zweier NAN-Werte in C ++

Ich habe eine Anwendung, in der ein Codebereich NAN-Werte erzeugt. Ich muss die Werte für die Gleichheit vergleichen und basierend darauf den Rest des Codes ausführen. Wie zwei NAN-Werte in C ++ für Gleichheit zu vergleichen?     
07.03.2013, 10:35
1
Antwort

Warum ist der Destruktor von boost :: thread detaching joinable thread anstatt den Aufruf von terminate () als Standard zu empfehlen?

Gemäß dem C ++ 0x-Standardentwurf lautet dieser Code: %Vor% ... sollte zu einem Aufruf von terminate () führen, aber in der aktuellen (Boost 1.46.1) Implementierung von Boost-Threads nicht, wird der Thread einfach in destructor losgelöst und...
03.05.2011, 19:17
1
Antwort

Warum gibt es in C ++ STL eine Trennung von Algorithmen, Iteratoren und Containern?

Ich kann nicht herausfinden, warum sie Algorithmen, Iteratoren und Container in C ++ STL getrennt haben. Wenn die Vorlagen überall stark verwendet werden, können wir Klassen haben, die alles mit Template-Parametern an einem Ort haben. Einige...
14.08.2012, 06:50
3
Antworten

Verknüpfen von g ++ 4.8 mit libstdc ++

Ich habe gcc 4.8.1 auf meinem Desktop heruntergeladen und gebaut, auf dem 64-Bit Ubuntu 12.04 läuft. Ich habe es aus der Quelle erstellt, wie es die Dokumente empfehlen, und mit den Befehlen %Vor% Es schien alle Tests zu bestehen, und ich ha...
20.06.2013, 18:16
8
Antworten

Wie bekomme ich eine Nummer von der unsignierten langen langen Maske?

Ich frage mich, wie man etwas wie dies rückgängig machen kann. Also mit einem mask wo auto mask = 1ULL << 20; Wie bekomme ich 20 aus der Maske?     
22.04.2013, 06:09