Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

C/C++ - Funkcja zwracająca tablicę

gwiezdny 04 Apr 2014 11:16 3714 4
  • #1
    gwiezdny
    Level 10  
    Witam,

    Napisałem funkcję, która powinna zwracać tablicę jednowymiarową, zapisywaną następnie jako wiersz/kolumna tablicy dwuwymiarowej. Wszystko niby działa. Przy pierwszym wywołaniu funkcji, zwraca ona poprawne wartości typu:
    37987
    4868,64
    4545,50
    3780,99
    2309,05
    itd.
    Przy drugim wywołaniu zwraca już wartości przeze mnie niezrozumiałe:
    1088611935
    1088588255
    1088587388
    1088587205
    1088589260
    itp.
    Tak samo jest przy trzecim wywołaniu:
    1749005231
    1749026061
    1249026930
    itp.



    Domyślam się, że problem dotyczy rzutowania tablic, czy ktoś mógłby mi podpowiedzieć co robię źle?

    funkcja wywołująca:
    Code: c
    Log in, to see the code


    funkcja wywołana:
    Code: c
    Log in, to see the code
  • Helpful post
    #2
    DRK82
    Level 12  
    Nie przejrzałem całego kodu, ale od razu rzuca się w oczy błąd, na który kompilator powinien zwrócić Ci uwagę:
    Code: text
    Log in, to see the code

    Stworzyłeś tablicę lokalną, której pamięć zostanie zwolniona po wyjściu z funkcji - nie można zwracać jej adresu.
    Powinieneś zastosować dynamiczny przydział pamięci, a następnie zwolnić ją, gdy już nie jest używana:
    Code:
    double *oout = malloc(511 * sizeof(double)); // w C
    
    double *oout = new double[511]; // w C++
  • #3
    gwiezdny
    Level 10  
    Dziękuję. Teraz funkcja wygląda następująco:

    Code: c
    Log in, to see the code


    Ale problem nadal nie jest rozwiązany. Może ktoś jeszcze będzie miał jakiś pomysł?
  • Helpful post
    #4
    Eagle
    Level 24  
    Bo nadal zwracasz wskaźnik na lokalną tablicę "oout". Masz też wyciek pamięci spowodowany tym, że po wyjściu z funkcji tracisz wskaźnik na zaalokowaną pamięć "out".
  • #5
    gwiezdny
    Level 10  
    Dziękuję za pomoc. Połączyłem obie funkcje w jedną:

    Code: c
    Log in, to see the code


    Teraz wszystko działa. Błąd był jeszcze jeden - zbyt krótka tablica (zamiast 512 miała 511, głupia sprawa :) ).