2016-11-22 5 views
0

Ich versuche, ein neues Element zu GI-Array hinzufügen, aber das scheint nicht zu funktionieren. Ich treffe hier eine Mauer. Kann jemand bitte beraten? Ich versuchte, vorbei additem (GI, & Recs, 222), wie unten gezeigt und Aktualisierung der Werte:C Programmierung: struct als Parameter übergeben - Funktion

#include <stdio.h> 


    struct Item { 
    double value; 
    int unitno; 
    int isTa; 
    int quant; 
    int minQuan; 
    char name[31]; 
}; 

struct Item GI[21] = { 
    { 41.4,1275,01,110,12,"Apples" }, 
    { 52.99,3826,02,220,24,"Melon" }, 
}; 
int Recs=20; 
void additem(struct Item item[], int *Recs, int unit); 
void addtest(); 


int main() 
{ 
addtest(); 
return 0; 
} 

void addtest() { 
additem(GI, &Recs, 222); 
} 

void additem(struct Item item[], int *Recs, int value) 
{ 
printf("--== Adding values! ==--\n"); 
     GI[21].value=44.44; 
     GI[21].quant=44; 
     GI[21].minQuan=4; 
     strcpy(Recs->name, "vGrape"); 
return 0; 
} 
+2

Out-of-Bounds schreiben, undefiniertes Verhalten. – EOF

+0

Wie groß ist Ihr Item-Array? Versuchen Sie, die Anzahl der im Array verwendeten Leerzeichen zu zählen und entscheiden Sie, wo neue Einträge eingefügt werden. –

+0

@johnelemans Ich denke, ich verstehe nicht, was Sie meinen, in ein Array einfügen? –

Antwort

0

Nein, es funktioniert nicht. Sie können Elemente zu einem Array in c nicht dynamisch hinzufügen. Sie benötigen dafür eine dynamische Speicherzuweisung, nämlich malloc() und family.

Dies ist keine triviale Angelegenheit, können Sie malloc() ‚s Schwester realloc() verwenden, um die Größe eines zuvor zugewiesenen Teil des Speichers zu erhöhen, aber man sollte es vorsichtig sein, nicht zu tun zu oft, weil Speicherzuweisung in Bezug auf die teuer ist Rechenzeit.

+0

Wenn ich das Array als GI [21] initialisiert habe, dachte ich, wir hätten Speicher für dieses Array reserviert? – John

+0

Ab sofort habe ich nur G [0] und G [1] voll und Rest von ihnen sind leer. Darf ich wissen, warum ich noch realloc brauche? – John

+0

Sie nicht. Es scheint, dass Sie mehr Elemente als ursprünglich zugewiesen haben wollten, da Sie 'G [21]' verwenden, das sich außerhalb des Arrays befindet. –

0

Array der Größe 21 kann nur die Indizes 0 - 20 annehmen.

Verwandte Themen