Tablica dynamiczna dwuwymiarowa jako argument funkcji

0

Witam serdecznie,
mam za zadanie stworzyć program gdzie pobieram do programu macierz, która następnie jest edytowana jako argument funkcji. Program kompiluje się jednak od razu gdy przychodzi do użycia argumentu w środku funkcji (elementu tablicy) program się sypie.

Funkcja o której mowa (wymiary tablicy (w i k) są jako zmienne globalne):

 //funkcja pobierajaca tablice dynamiczna dwuwymiarowa
int funkcja3(int **tablica)
{
    
    
     for(i=0;i<w;i++)
     {
             for(j=0;j<k;j++)
             {
              if(tablica[i][j]<0)
              licznik++;
             }
     }  
     printf("%d",licznik);
     
     if(licznik >= 6)
     {
          for(i=0;i<w;i++)
     {
             for(j=0;j<k;j++)
             {
             if(tablica[i][j]<0)              
              tablica[i][j];
             }
     }  
     }
     
     return **tablica;

}

Tak wygląda wywołanie funkcji, co do którego mam spore wątpliwości. Natomiast sprawdziłem - program wchodzi do funkcji a sypie się przy pierwszym wykorzystaniu elementu tablicy.

**a=funkcja3(**a);

Dla pewności tutaj jeszcze kod z dynamicznej alokacji:

     //alokacja pamieci dla dynamicznie tworzonej tablicy 2 wymiarowej (macierzy)
     a = (int**)malloc(sizeof(int*)*k);
     for (i = 0; i<w; i++)
     {
     a[i] = (int*)malloc(sizeof(int)*k);
     } 

Bardzo proszę o pomoc. Zawsze programowałem w C++, natomiast obecnie muszę korzystać ze starych funkcji znanych z języka C i powoli się w tym gubię, być może tu leży problem.

Z góry bardzo dziękuję za pomoc, pozdrawiam serdecznie.

1
int **funkcja3(int **tablica)
...
return tablica;

funkcja3(a); // ewentualnie a=funkcja3(a);

a = (int**)malloc(sizeof(int*)*w);
0

Super, bardzo dziękuję. Myślałem, że skoro wchodzi do funkcji jako **tablica to i tak musi wychodzić. W każdym razie widocznie trzeba się dokształcić :) Co do ostatniego błędu to nie rozumiem dlaczego tak było :P Jeszcze raz wielkie dzięki ;)

0

Ogólnie funkcja może być typu void jeżeli i tak tylko modyfikujesz tę tablicę - nie zwracasz nic innego

1 użytkowników online, w tym zalogowanych: 0, gości: 1