Wskaznik do tablicy dynamicznej

Wskaznik do tablicy dynamicznej
D3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0

Mam polecenie zeby sprawdzic dlaczego ten kod nie dziala.
Probowalem poprzez przekazywanie tablicy wskaznikiem do wskaznika lecz niestety sie nie udalo.
Moglby mi ktos wyjasnic na czym polega tutaj blad?
Udalo mi sie odpalic po zadeklarowaniu tablicy dynamicznej v w mainie ale z polecenia wynika ze trzeba cos kombinowac ze wskaznikami.

Kopiuj
void initialize_vec_BAD(int *ptr, int N) {
  ptr = (int *)malloc(N * sizeof(int));
  for (int j = 0; j < N; ++j)
    ptr[j] = 3 * j;
  
  printf("Wewn. funkcji initialize:\n");
  for (int j = 0; j < N; ++j) {
    printf("%d ", ptr[j]);
  }
  printf("\n");
}

int main() {
  int N = 10;
  int *v;
  
  initialize_vec_BAD(v, N);
  
  printf("Wewn. funkcji main:\n");
  for (int j = 0; j < N; ++j){
    printf("%d ", v[j]);
  }
  printf("\n");
  
  free(v);
  
  getchar();
}
  • Rejestracja: dni
  • Ostatnio: dni
0

return ptr;

pod:
v = initialize_vec_BAD(N);

lub robisz to poprzez referencję do wskaźnika.

D3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
1

mam podane ze daklaracja powinna wygadac tak:

Kopiuj
void initialize_vec(int **ptr, int N)

Wiec chyba nie chodzi o te sposoby

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
D3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0

sprobowalem wlasnie w taki sposob przekazac wartosc przez wskazniki

Kopiuj
void initialize_vec_BAD(int **ptr, int N) {
 *ptr = (int *)malloc(N * sizeof(int));
  for (int j = 0; j < N; ++j)
    *ptr[j] = 3 * j;
  
  printf("Wewn. funkcji initialize:\n");
  for (int j = 0; j < N; ++j) {
    printf("%d ", ptr[j]);
  }
  printf("\n");
}

int main() {
  int N = 10;
  int *v;
  
  
  initialize_vec_BAD(&v, N);
  
  printf("Wewn. funkcji main:\n");
  for (int j = 0; j < N; ++j){
    printf("%d ", v[j]);
  }
  printf("\n");
  
  free(v);
  
  getchar();
}
lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5025
0

I co?

D3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0
lion137 napisał(a):

I co?

obecnie program przestaje odpowiadac

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5025
0

Jeżeli Przekazujesz pointer, to trzeba przekazać do niego pointer int ** ptr, oraz, nie ma może to być inicjalizowane na stosie, bo to będą lokalne wartości, no i przekazujemy wskażnik do wskaźnika, więc &v

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


void initialize_vec_GOOD(int **ptr, int N) {
  *ptr = (int *) malloc(N * sizeof(int));
 
}
 
int main() {
  int N = 10;
  int *v;
  initialize_vec_GOOD(&v, N);
  for (int j = 0; j < N; ++j)
     v[j] = 3 * j;
  printf("Wewn. funkcji main:\n");
  for (int j = 0; j < N; ++j)
	printf("%d ", v[j]);
  
  printf("\n");
 
  free(v);
}

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.