Avatar billede casperk Nybegynder
03. april 2003 - 01:21 Der er 6 kommentarer og
1 løsning

dynamisk array som result for en function

Hej.

Jeg har en function:

function calcintegral(.......):nvector;
var testvector; nvector;
begin
  setlength(testvector,nvalue);
  ...
  result:=testvector;
end;
Hvor nvector = array of double;

Jeg kalder functionen med

integral:=calcintegral(....);

Og får "invalid pointer operation".

Jeg har naturligvis brugt setlength på både integral og testvector. Jeg bruger en masse dynamiske arrays i programmet, og eneste sted jeg får problemer er hvor det er function return type. Jeg har haft problemet før, og vil MEGET gerne vide hvad det er jeg gør forkert!
Avatar billede hreiff Nybegynder
04. april 2003 - 10:21 #1
Der er ikke reserveret plads til udvidelsen af den dynamiske array i funktionsresultatet.
Brug en pointer:

type
  nvector = array of double
  pnvector = ^nvector

var
  integral = nvector;

function calcintegral(.......):pnvector;
var
  testvector; nvector;
begin
  setlength(testvector,nvalue);
  ...
  result:=@testvector[0];
end;

Begin
  integral:=calcintegral(....)^;
End;
Avatar billede hreiff Nybegynder
04. april 2003 - 10:33 #2
Ps. Husk at variablen 'integral' skal være stor nok til at rumme resultatet.
Avatar billede casperk Nybegynder
04. april 2003 - 14:08 #3
Ok... Jeg troede Delphi selv oprettede en pointer til resultatet, og at jeg bare skulle specificere hvor meget memory jeg havde brug for. Det går godt nogengange(Dog ikke i dette program), nogen ide om hvordan det kan være? Jeg troede ikke det var nødvendigt at bruge pointers i Delphi overhovedet?
Avatar billede hreiff Nybegynder
04. april 2003 - 16:09 #4
Du ændrer størrelsen på variablen testvector, men hvad med variablen result (som er det som funktionen returnerer)- det er principielt en variabel som alle andre? Jeg mener ikke at man kan pille ved result - og det er der problemet ligger.
Avatar billede casperk Nybegynder
04. april 2003 - 17:15 #5
Ok.... Tak for svaret! Tror jeg skal have anskaffet mig en bedre Delphi bog. Den jeg har er lidt meget "begynder" ....
Avatar billede casperk Nybegynder
08. april 2003 - 02:36 #6
Hmmm... Nu er jeg i vanskeligheder igen... Jeg skal udvide til et NxM array som result type. Jeg har prøvet blot at ændre type erklæringen for nvector til array of array of double, og får igen smidt en invalid pointer operationer i hovedet... Nogen hints???
Avatar billede hreiff Nybegynder
08. april 2003 - 07:20 #7
Hvor får du fejlen?
Umiddelbart burde det ikke gøre nogen forskel om der er 1 eller 2 dimensioner i dit array.
Måske i:
  result := @testvector[0][0]; { husk at det ikke er testvector[0,0] }


Alternativt kan du lægge testvector som en global variabel - så behøver du ikke at overføre en pointer.
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