global array av structar...med pekare..=(
global array av structar...med pekare..=(
hej
jag håller på och försöker göra en array av structurer. dessa ska kunna användas av flera olika funktioner så därför hade jag tänkt att de skulle vara globala. och så ska det då vara pekare till dessa för att spara minne..
detta var det jag kom fram till:
i meny.h-filen:
typedef struct
{
char va[30];
int id;
int nummer;
}info;
i meny.c filen
info *xbee[20];
i de andra filerna där den ska kunna anropas :
extern info *xbee[20];
är detta rätt?
det verkar kompilera och jag får inga fel. men dock verkar det inte som den "minns" det som sparats undan i dessa structar efter det att jag går till en annan funktion och sedan återvänder...detta inte ens om jag lägger extern info *xbee[20];
i alla filerna som finns.
vad gör jag för fel? är det nån som kan detta?
har hållit på och försökt få till detta hur länge som helst nu..
står inget i min bok och jag hittar inte nån sida där de förklarar på ett bra sätt hur man gör. tacksam på förhand.
jag håller på och försöker göra en array av structurer. dessa ska kunna användas av flera olika funktioner så därför hade jag tänkt att de skulle vara globala. och så ska det då vara pekare till dessa för att spara minne..
detta var det jag kom fram till:
i meny.h-filen:
typedef struct
{
char va[30];
int id;
int nummer;
}info;
i meny.c filen
info *xbee[20];
i de andra filerna där den ska kunna anropas :
extern info *xbee[20];
är detta rätt?
det verkar kompilera och jag får inga fel. men dock verkar det inte som den "minns" det som sparats undan i dessa structar efter det att jag går till en annan funktion och sedan återvänder...detta inte ens om jag lägger extern info *xbee[20];
i alla filerna som finns.
vad gör jag för fel? är det nån som kan detta?
har hållit på och försökt få till detta hur länge som helst nu..
står inget i min bok och jag hittar inte nån sida där de förklarar på ett bra sätt hur man gör. tacksam på förhand.
Re: global array av structar...med pekare..=(
Du har väl inte någonstans definierat (dvs tilldelat minne till) själva struktarna? Du har väl bara typedef:at structen och definierat en array av pekare till sådana structar?
Re: global array av structar...med pekare..=(
Du har deklarerat en array av pekare.
Du måste även deklarera data och sätta pekarna dit:
Kod: Markera allt
info *xbee[20];
Kod: Markera allt
{
int i;
info xbee_data[20]; /* Du kan lägga detta i en extern modul, ej headerfil */
info *xbee[20]; /* Pekare */
for (i=0; i<20; i++)
{
xbee[i] = &xbee_data[i];
}
}
Re: global array av structar...med pekare..=(
Deklaration av static mm kan också inverka hurvida det blir globalt eller inte.
Re: global array av structar...med pekare..=(
Är inte rätt, ialla fall inte ansi, därmed inte sgt att det fungerar, dock blir det problem med portabiliteten.Kod: Markera allt
typedef struct { char va[30]; int id; int nummer; }info;
Gör så här i stället
Kod: Markera allt
typedef struct _INFO
{
char va[30];
int id;
int nummer;
}info;
Sedan kan du skapa dina variabler med
Kod: Markera allt
info varInfo;
Re: global array av structar...med pekare..=(
Man brukar väl alltid få göra en malloc (av någon sort) så att man även
får utrymmet i verkligheten, så att säga. Inte bara definitionerna...
Något i stil med :
Eller något i den stilen.
Hur det ska se ut med en array of struct får bli hemläxa...
får utrymmet i verkligheten, så att säga. Inte bara definitionerna...
Något i stil med :
Kod: Markera allt
typedef struct
{
...
...
}info;
info *varInfo;
varInfo = (struct info *) malloc(sizeof(struct info));
Hur det ska se ut med en array of struct får bli hemläxa...
Re: global array av structar...med pekare..=(
I regel "finns" inte MALLOC i C-kompilatorer för uProc, men å andra sida vet vi ju inte vad han utvecklar mot
Re: global array av structar...med pekare..=(
Vadan denna ständiga typedef? Varför inte bara göra en struct och sedan ange "struct info *varInfo" i koden? Då framgår det ju dessutom tydligare att det är en strukt och inte vilken variabeltyp som helst, och koden blir imo renare och lättare att underhålla om några år när allt är bortglömt.
Re: global array av structar...med pekare..=(
malloc() gör man när man tilldelar minne medans programmet körs. Vad OP förmodligen är ute efter är att tilldela minne compile time. Att tilldela minne compile time för en variabel (statiskt) kallas att definiera. Inte detsamma som att deklarera.sodjan skrev:Man brukar väl alltid få göra en malloc (av någon sort) så att man även
får utrymmet i verkligheten, så att säga. Inte bara definitionerna...
Det är definiera själva variabeln han inte har gjort.
Lite språkpolisande bara
Re: global array av structar...med pekare..=(
Förstår heller inte varför han ska ha pekare enbart? Vore inte bättre att definera upp 20 structar direkt vid start? Det vore kanske lämpligt om dude talade om vilken miljö han skriver programmet till. Men både på uC och PC så är det fail att definera upp 20 lösa pekare.
Re: global array av structar...med pekare..=(
oj vad många som svarade =)
okej jag försöker förklara vad som går fel:
allting funkar precis som det ska och jag kan kopiera strängar och spara data och allt vad det är. men problemet som jag hittat nu är att det inte funkar om jag inte kör en malloc varje gång jag kommer in i funktionen.
om jag inte kör malloc varje gång jag går in i funktionen så fungerar inte min strcpy..
om jag endast kör malloc första gången jag går in i funktionen och inte de följande gångerna så får jag bara nollor..
den är ju globalt så då borde jag väl inte behöva köra malloc mer än en gång???
for(o=0; o<10; o++){
strcpy(alpa, xbee[num]->vapen);//här printas det data som till xbeena
beta=alpa[o];
x=x+7;
alphabet(beta,y,x);
}
okej jag försöker förklara vad som går fel:
allting funkar precis som det ska och jag kan kopiera strängar och spara data och allt vad det är. men problemet som jag hittat nu är att det inte funkar om jag inte kör en malloc varje gång jag kommer in i funktionen.
om jag inte kör malloc varje gång jag går in i funktionen så fungerar inte min strcpy..
om jag endast kör malloc första gången jag går in i funktionen och inte de följande gångerna så får jag bara nollor..
den är ju globalt så då borde jag väl inte behöva köra malloc mer än en gång???
for(o=0; o<10; o++){
strcpy(alpa, xbee[num]->vapen);//här printas det data som till xbeena
beta=alpa[o];
x=x+7;
alphabet(beta,y,x);
}
Re: global array av structar...med pekare..=(
Du *får* inte köra malloc mer än en gång. Dels får du en ny minnesarea tilldelat varje gång (vilket kan förklara att den inte "kommer ihåg") och dels har du en gigantisk minnesläcka.
Re: global array av structar...med pekare..=(
> om jag inte kör en malloc varje gång jag kommer in i funktionen.
Om du gör det *en* gång utanför (i main) funktionen då ?
Om du gör det *en* gång utanför (i main) funktionen då ?
Re: global array av structar...med pekare..=(
ja la ner det hela eftersom det visade sig vara ganska komplicerat enligt ett dokument som jag hittade (avr-libc-user- manual)
Re: global array av structar...med pekare..=(
Typiskt exempel på hur det kan gå om man inte FÖRSTÅR hur en processor fungerar, vad pekare egentligen är och hur minne allokeras.
(Det är ju egentligen lite lustigt att när man programmerar assembler så är det i princip BARA pekare man använder:-)
(Det är ju egentligen lite lustigt att när man programmerar assembler så är det i princip BARA pekare man använder:-)