Avatar billede rrm Nybegynder
28. august 2007 - 01:15 Der er 7 kommentarer og
1 løsning

Allokering af hukommelse i funktion

Sidder lige og bøvler lidt med allokering af hukommelse. Det jeg vil opnå er at:

int* t = NULL

void test(int* t)
{
  t = new int()
  t = 10
}

test(t);
cout << t;

Er dette muligt???
Avatar billede bertelbrander Novice
28. august 2007 - 01:23 #1
void test(int*& t)
{
  t = new int;
  *t = 10;
}

int main()
{
  int* t = 0;
  test(t);
  cout << t[0] << endl;
  delete t;
}
Avatar billede rrm Nybegynder
01. september 2007 - 12:30 #2
Ok tak, lige en ting til. Vil følgende opnå det samme???

void test(int** t) ???
Avatar billede bertelbrander Novice
01. september 2007 - 12:58 #3
Ja, men så skal det være:

void test(int** t)
{
  *t = new int;
  **t = 10;
}

  test(&t);

Der er mange der mener at det er grimt at én funktionen allokerer og en anden deallokerer, det bør være den samme.
Avatar billede rrm Nybegynder
03. september 2007 - 16:18 #4
dvs
x = createX()
freeX(x)

er en dårlig opbygning???
Avatar billede bertelbrander Novice
03. september 2007 - 19:40 #5
Nej, det er ok, her er det den samme der opretter og nedlægger.

Problemer er kode som
char *p;
DoSomething(p);
free(p);

Det er ikke umiddelbart logisk at kalderen af DoSomething() skal kalde free(p)

I dit eksempel har du både en createX og en freeX så det er ok.
I nogle tilfælde ville det være smartere med constructor og destructor til objektet.
Avatar billede rrm Nybegynder
04. september 2007 - 12:04 #6
ok, jeg havde også en masse create/get og freeX funktioner, men dem har jeg fjernet til fordel for objekter... Det er noget nemmere....

Og du har ret i at funktionerne skal hedde noget logisk for knytte dem sammen.

Tak for svarene... Vil du have point???
Avatar billede bertelbrander Novice
04. september 2007 - 23:27 #7
Nej, jeg samler ikke på point.
Avatar billede rrm Nybegynder
12. september 2007 - 22:21 #8
ok
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