Wskaznik do tablicy dynamicznej

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.

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();
}
0

return ptr;

pod:
v = initialize_vec_BAD(N);

lub robisz to poprzez referencję do wskaźnika.

1

mam podane ze daklaracja powinna wygadac tak:

void initialize_vec(int **ptr, int N)

Wiec chyba nie chodzi o te sposoby

0

sprobowalem wlasnie w taki sposob przekazac wartosc przez wskazniki

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();
}
0

I co?

0
lion137 napisał(a):

I co?

obecnie program przestaje odpowiadac

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

#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);
}

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