Warum tut sich eine große variable-Länge-array hat einen festen Wert -1 zugeordnet, auch wenn in C?
Ich versuche eine variable sized array in c.
Array hält wieder ein Wert von -1.
Was ich will zu tun ist, um ein array der Größe size
und dann schrittweise Werte hinzufügen. Was mache ich falsch?
int size = 4546548;
UInt32 ar[size];
//soundStructArray[audioFile].audioData = (UInt32 *)malloc(sizeof(UInt32) * totalFramesInFile);
//ar=(UInt32 *)malloc(sizeof(UInt32) * totalFramesInFile);
for (int b = 0; b < size; b++)
{
UInt32 l = soundStructArray[audioFile].audioDataLeft[b];
UInt32 r = soundStructArray[audioFile].audioDataRight[b];
UInt32 t = l+r;
ar[b] = t;
}
Duplikat von stackoverflow.com/questions/448844/variable-sized-arrays-in-c
Code sieht OK, aber die Größe ist groß. Sind Sie sicher, dass Ihr Programm hat 18MB stack zu verwenden?
Ich war immer verwirrt, wie viele Artikel ich will, dass mein array zu halten und die tatsächliche Größe.
Code sieht OK, aber die Größe ist groß. Sind Sie sicher, dass Ihr Programm hat 18MB stack zu verwenden?
Ich war immer verwirrt, wie viele Artikel ich will, dass mein array zu halten und die tatsächliche Größe.
InformationsquelleAutor dubbeat | 2010-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie brauchen, ist ein dynamisches array. Eine, die man zuordnen kann, der eine erste Größe, dann verwenden Sie
realloc
die Größe zu erhöhen, indem es einen Faktor, wenn angemessen.I. e.,
Verwenden Sie diese Funktion, um zu wachsen:
Das ist richtig.
InformationsquelleAutor jer
Sollte man wohl reservieren (und anschließend wieder frei) das array dynamisch, etwa so:
InformationsquelleAutor Wyatt Anderson
wenn Sie die Größe einer const int-das sollte funktionieren. Auch, wenn das array innerhalb einer Funktion und Größe ist ein argument, sagte der Funktion, das sollte auch funktionieren.
InformationsquelleAutor Hervé
C nicht zulässt, dass eine variable verwendet werden bei der Definition einer array-Größe, was, die Sie würden tun müssen, ist
malloc
ist, sollten Sie auf eine Idee:Vergessen Sie nicht, gratis es danach
C (die aktuelle version C99) nicht lassen Sie es. C89 nicht. Compiler, die nicht unterstützen, es sollte eine Fehlermeldung zur compile-Zeit ("Konstanter Ausdruck erwartet", oder so ähnlich), nicht kompiliert, sondern geben Ihnen einen unerwarteten Wert von -1. Welchen compiler benutzt du?
Ah, mein Fehler dann. Richtig, da war er nicht immer einen compile-Fehler
seine gcc 4.2
in diesem Fall VLAs werden unterstützt (mit -std=c99), und ich bin mir ziemlich sicher, dass hier das problem ist entweder, dass Sie out-of-stack und etwas Undefiniertes passiert (würde ich erwarten, dass ein segmentation Fault+coredump, aber man weiß ja nie), oder aber es gibt einige unabhängige Fehler im code zum füllen des Arrays, die Ursache des unerwarteten Wert von -1. Array mit variabler Länge (VLAs) sind ziemlich schwer sicher zu verwenden, ich persönlich denke, Sie sind ein bisschen sinnlos.
InformationsquelleAutor Argote