Avatar billede bolmer Nybegynder
11. oktober 2005 - 20:45 Der er 14 kommentarer og
1 løsning

Variabel størrelse på et globalt array?

Er det ikke muligt i C at specificere størrelsen på et globalt array når main køres?

tænkte på noget i stil med:

int z;
int a[z];

int main()
{
  printf("Enter the size of array a: ");
  c = getchar();
  z = c;
 
  return 1;



}


Dette virker ikke, men er der en anden måde at gøre det på??
Avatar billede arne_v Ekspert
11. oktober 2005 - 20:51 #1
jo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int *a;

int main()
{
  int z;
  /* indlæs z */
  a = (int *)malloc(z*sizeof(int));
  /* brug a */
  free(a);
  return 1;
}
Avatar billede arne_v Ekspert
11. oktober 2005 - 20:51 #2
c = getchar();
z = c;

giver iøvrigt 41 hvis du taster '1'
Avatar billede bolmer Nybegynder
11. oktober 2005 - 21:17 #3
Ok men det er kun muligt hvis man anvender pointers og malloc??
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:19 #4
ja
Avatar billede bolmer Nybegynder
11. oktober 2005 - 21:30 #5
men jeg kan stadig ikke få det til at du:

int *d;
struct test {
  int a;
  int b;
};

struct test array[d];



int main()
{
  int o;
  int c;
  c = getchar();
  o = c;
  d = (int *)malloc(o*sizeof(int));
  free(d);
  return 1;

}

Det er jo som sagt størrelsen på et array jeg vil sætte udfra hvad brugeren indtaster.
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:33 #6
mener du:

struct test {
  int a;
  int b;
};

struct test *array;

og

array = (array *)malloc(o * sizeof(struct test));
...
free(array);

eller ??
Avatar billede bolmer Nybegynder
11. oktober 2005 - 21:42 #7
det er måske det jeg mener. Men jeg troede bare man kunne lave et "normalt" array globalt:

struct test array[d];


Hvor man på en eller lader brugeren angive d når main køres vha. getchar().

Men det er måske kun muligt at lave det som et:

"struct test *;"

i stedet for

"struct test array[d];"

?
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:46 #8
pladsen til globale variable skal afsættes på compile tidspunkt
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:46 #9
en compiler som ikke bekymrer sig om størrelsen på EXE vil faktisk allokere
pladsen i EXE filen (men jeg tror de fleste bare gemmer oplysninger
om at her skal der afsættes 2000 bytes)
Avatar billede bolmer Nybegynder
11. oktober 2005 - 21:50 #10
Det forstod jeg ikke meget af. Men jeg går udfra at det er umuigt på den måde som jeg troede det skulle kunne lade sig gøre.

Iøvrigt mente du ikke:

array = (struct test *)malloc(o * sizeof(struct test));

i stedet for:

array = (array *)malloc(o * sizeof(struct test));

Det sidste her giver i hvert fald en fejl.
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:52 #11
jo

det var en oopser
Avatar billede bolmer Nybegynder
11. oktober 2005 - 21:55 #12
ok, det er vel en god ide at vente med at kalde "free" hvis jeg ønkser at bruge denne pointer i nogle forskellige funktioner før programmet skal terminerer?
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:57 #13
ja meget

efter free genbruges pladsen til andre variable !
Avatar billede bolmer Nybegynder
11. oktober 2005 - 22:00 #14
du skal have tak for hjælpen. bare lig et svar
Avatar billede arne_v Ekspert
11. oktober 2005 - 22:02 #15
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester