dynamisches array in der Struktur mit aufeinander folgenden Speicher?
struct Test
{
int var;
char *arr;
}
int main()
{
Test a;
a.arr = new char[50];
}
Würde der obige code erstellen Sie ein dynamisches array in der Struktur, sondern das dynamische array wäre nicht tatsächlich Speicher innerhalb der Struktur, deren Speicher zugeordnet werden würde woanders. Ich möchte in diesem array zugeordnet werden, in der Struktur als mit dem fixed-array, aber ich möchte nicht mit festen array. Irgendwelche Ideen?
Ich habe mein bestes versucht zu klären, meine Frage, hoffe, Sie verstehen.
Will ich senden Sie diese Struktur über UDP und UDP-nimmt weiterhin-Speicher-Puffer zu senden, das ist, warum ich wollen, dass diese Struktur dauerhaft Speicher.
- Können Sie erklären, warum Sie das brauchen? Es würde klären Sie Ihre Frage ein wenig mehr.
- Einen bestimmten Grund für die nicht-Verwendung
std::vector
oderstd::array
? - möglich, Duplikat der Wie deklarieren Sie eine Konstante array in der Klasse mit Konstanten Klassenvariable? --- Didn ' T Sie nur bitten, diese Frage, nur etwas anders formuliert? So, da haben wir Ihnen gesagt, dass das, was Sie wollen (eine statische, noch variable type) existiert nicht in C++, Sie denken, dass, wenn Sie immer wieder Fragen, ist es schließlich möglich geworden?
- Ich möchte zum senden dieser Struktur über UDP und UDP-nimmt weiterhin-Speicher-Puffer zu senden, das ist, warum ich wollen, dass diese Struktur dauerhaft Speicher.
- Es gibt keinen Grund, warum Sie nicht verwenden können normale, dynamische Zuweisung für, die. Nur reservieren
sizeof(int) + N
bytes, füllen Sie die Spitze mit der integer-und dann senden Sie die ganze Sache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht tun, wie der neue Speicher wird vom heap/free-Shop und Ihr ein Mittel wird auf stack....
können Sie reservieren mit malloc/new zusammenhängende Speicher block sizeof Test + deine gewünschte Größe und stellen Sie die Zeiger-arr-zu-Punkt am Ende der Test-Struktur.
Wenn Sie es brauchen in Funktion und Umfang auf stack können Sie alloca.
Nein, Sie können Sie haben eine variable Länge von arrays in C++.
So können Sie nicht tun.
Können Sie haben eine fixe Länge-array oder verwenden Sie den Ansatz, den Sie gegeben haben.
Ein anderer Ansatz ist,
Sie können Platzierung neuer, um Ihre array in ein pre-allocated memory location. Dieser Speicher könnte auf Stapel.
Deinen code nicht kompilieren. Sollten Sie kompilieren Sie alle Warnungen aktiviert, und es zu verbessern, bis Sie bekam keine Warnungen. Und werden Ihr Studium in C oder C++? Wenn es C++ ist, sollten Sie mithilfe std::vector
Können Sie die array-Größe auf struct-Konstruktor und Speicher für das array gibt. Vergessen Sie nicht freigeben es irgendwo, z.B. im Destruktor:
&arr == &t + sizeof(int)
und nicht einige zufällige Position.Obwohl es noch nicht "gesegnet", wie es in C, die meisten Compiler können Sie immer noch verwenden Sie die "Struktur-hack":
Der "trick" ist, dass, wenn Sie sich um Speicher, die Sie genügend Platz für die Daten, die Sie speichern möchten (aber das bedeutet, dass es muss werden dynamisch zugeordnet):
In der Theorie, dies ist nicht erforderlich, um zu arbeiten -- der compiler könnte tun gebunden-überprüfen Sie auf Verweise auf die
data
Mitglied um sicherzustellen, dass Sie keinen index, über den ein element, das Sie definiert haben, es zu halten in der struct-definition. In der Realität, ich weiß nicht von einem einzigen compiler, der hat so ein Ding, und die Art von Zweifel, dass so etwas existiert. Recht viel C-code hat Dinge getan, wie dies seit Jahren, so einen compiler, der hat eine solche Prüfung würde nicht nur die Arbeit mit einer Menge von real-Welt-code, auch wenn es die Norm zulässt. C99 fügt auch diese (mit undeutlich unterschiedliche syntax) als offizielles feature der Sprache.Bottom line: es ist ein bisschen ungeschickt, aber die Möglichkeit, wirklich nicht, die Arbeit ist fast ausschließlich theoretisch.
Nicht wirklich dynamische Zuweisung, aber könnte dein problem lösen (hängt davon ab, ob Sie immer wissen, die gewünschte Größe des Arrays zur compile-Zeit)