Array erweitern in C?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du machst 3 ganz elementare Fehler in deinem Code:

  1. Die vergisst die Decrementierung von n, siehe Antwort von ETechnikerfx
  2. Eine Syntax a la "int array[] = { [7] = 42 }" funktioniert meines Wissens nach nur bei der Initialisierung von Arrays, nicht bei einem späteren Zugriff. In dem Fall greift man (sowohl lesend als auch schreibend) einfach mit divisors[m] auf das entsprechende Element zu
  3. Und das ist mit Abstand der wichtigste Fehler: Du hast ein statisches Element der Größe m erzeugt. m ist aber uninitialisiert, d.h. die Größe ist eigentlich unbekannt. Es gibt also mit an Sicherheit grenzender Wahrscheinlichkeit Speicherlecks in dem Code. Du hast 2 Optionen um das Problem zu lösen: Entweder ist dir von vornherein bekannt, wie groß das Array maximal wird => Diese Größe als statisches Array allokieren. Falls das nicht der Fall ist, dann musst die ein dynamisches Array nutzen und es ggf erweitern (Speicherallokation funktioniert mittels malloc/calloc und free)

Du hast die Incrementbedingung im For-Rumpf vergessen. Was soll dort incremetiert werden? Vermutlich der Devisor korrekt? dann sollte das auch so dort stehen:

for (divisor = n; divisor > 0; divisor --) {

Der Devisor muss ja decrementiert werden, da du diesen mit n initialisierst.

divisors[m] = divisors;

Im übrigen schreibst du deinen ersten Teiler in divisors[0], nicht in divisors[1].

Dies nur zur Info

ultrabrot123  12.01.2018, 07:45

Du meinst

"Im übrigen schreibst du deinen ersten Teiler in divisor[1], nicht in divisor[0]" oder?

1
gfntom  12.01.2018, 07:53

Im übrigen schreibst du deinen ersten Teiler in divisors[1], nicht in divisors[0], sollte es natürlich heißen!

0