Mam funkcję, podstawową ideą funkcji jest zmiana tego, co wskazuje a
. Pierwsza wersja działa, ale druga wersja nie.Anomalia wskaźnika C, proszę wytłumaczyć
Czy ktoś mógłby mi pomóc zrozumieć, co się tutaj dzieje?
// this works
void swap(int **a) {
int *temp = malloc(sizeof(int) * 3);
temp[0] = 0;
temp[1] = 1;
temp[2] = 2;
*a = temp;
}
// this does not
void swap(int **a) {
*a = malloc(sizeof(int) * 3);
*a[0] = 0;
*a[1] = 1; // seg fault occurs on this line
*a[2] = 2;
}
Wołam funkcję jak tak
int main() {
int b[] = {0,1};
int *a = b;
swap(&a);
return 0;
}
Ponadto, obie funkcje nie należą do tego samego pliku w tym samym czasie.
Robisz coś bardzo złego w drugiej funkcji. – wRAR
Po co nazywać nową zmienną o tej samej nazwie paramatera? –
Ponowne deklarowanie tablicy int w drugiej funkcji wymiany było niedopatrzenie podczas publikowania tutaj. Usunąłem to z pytania. – robbmj