Problem ze wskaźnikami

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

void funkcja(int*** table2d, int** lengths){
    if (*table2d == NULL){
        *table2d = (int**)(malloc(sizeof(int*)));
        *lengths = (int*)(malloc(sizeof(int)));
        scanf("%d", &(*(*(lengths + 0))));
        *(*(table2d + 0)) = (int*)(malloc(*(*(lenghts + 0)) * sizeof(int)));
        int i = 0, tmp;
        while (i < *(*(lengths + 0))){
            scanf("%d", &tmp);
            *(*(*(table2d + 0) + i)) = tmp;
            i++;
        }
    }
}

int main(){
   int** table2d = NULL;
   int* lengths = NULL;

   funkcja(&table2d, &lengths);

   return 0;
}

Nie wiem co źle zapisałem że ta funkcja nie działa.
Przykładowe wywołanie
5 0 1 2 3 4

powoduje błąd wykonania po wczytaniu 1....
tak jakby za mało pamięci alokował? O co chodzi?
Proszę o pomoc gdzie tkwi błąd

0

Jest literówka w "lenghts". Strasznie pokomplikowane, nie mam pewności czy jest dobrze ale z tym działa

 *(*(*table2d)+ i) = tmp;
0

Jak już działa to OK, ale nie rozumiem, po co takie coś pisać?

0

Pewnie chodziło o to.
Ale nie sprawdzałem czy działa jak ma być zamierzone.
2d jest bardzo mylące nie wiem czy autor se jaja robi czy nie ma pojęcia co chce zrobić.

#include <malloc.h>

void funkcja(int*** table2d, int** lengths){

    if ( ( *table2d == NULL ) && ( *lengths == NULL ) ) {

        // to jest w tym zadaniu najbardziej idiotyczne.
        // bo mamy w istocie wektor który alokujemy (bardzo mylace biorąc pod uwagę tabela2d note 2D!! )
        *table2d = malloc( sizeof( **table2d ) );
        *lengths = malloc( sizeof( **lengths ) );
        scanf( "%d", *lengths );

        **table2d = malloc( (**lengths) * sizeof( ***table2d ) );
        for( int i = 0; i < **lengths; i++)  scanf("%d", **table2d + i );
       
    }
}
 

int main( void )  {

    return 0;

}

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