Pointer to pointer tworzenie tablicy

Pointer to pointer tworzenie tablicy
Mateusz Janiak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

otóż mój problem polega na błędzie SIGSEGV w funkcji

Kopiuj
int create_array_int(int **ptr, int N)
{
    if(N < 1) return 1;
    *ptr = malloc(sizeof(int)* N);
    if(*ptr==NULL) return 2;
    return 0;
}

może źle się gdzieś odwołuję? Pierwszy raz się spotykam ze wskaźnikiem na wskaźnik z literatury udało mi się wyczytać że powinno to tak wyglądać. Jednak pokazuje SIGSEGV.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1

Ten fragment kodu jest prawidłowy. To kod wywołujący jest niepoprawny.
Możesz dodać:

Kopiuj
if (!ptr) return 3;
Mateusz Janiak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Problem w tym że uczelniany kompilator sprawdza tylko ten fragment nic więcej.
Podstawia sobie wartości jakieś.

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
0

Fragment

Kopiuj

*ptr = malloc(sizeof(int)* N);

jest prawidłowy tylko wtedy, gdy sizeof(int)==sizeof(int*). Na wielu architekturach tak, ale nie zawsze. Brak jednej gwiazdki, byłby prawidłowy bezwzględnie

Po drugie, malloc() NIE CZYŚCI pamięci, masz tam wartości przypadkowe. Sugeruję calloc()

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

Poradziłem sobie, test sprawdza co się dzieje gdy ptr jest NULL czy ma to sens? Bo moim zdaniem powinien być NULL skoro dopiero w tej funkcji będę przydzielał pamięć?

Mówimy tutaj o 2 różnych wskaźnikach.
*ptr to wskaźnik na tablicę, którą tworzysz. Przy wejściu do funkcji może mieć dowolną wartość, w tym NULL.

ptr to wskaźnik na miejsce, gdzie ten wskaźnik na tablicę leży. Funkcja, która woła Twoją funkcję przekazuje ten wskaźnik i mówi zapisz w tym miejscu adres tablicy, którą tworzysz. Jasne wtedy jest, że to miejsce nie może być NULLem.

Mateusz Janiak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Brzmi to sensownie, w każdym razie trochę się nauczyłem o wskaźnikach na wskaźniki :3 dziękuje wszystkim za pomoc i rady :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.