Bir işleve sahibim, fonksiyonun temel fikri, a
'un işaret ettiği noktaları değiştirmektir. İlk versiyon çalışır ancak ikinci versiyonda yoktur.C işaretçisi anomalisi, lütfen açıkla
Birisi burada neler olup bittiğini anlamak için bana yardımcı olabilir mi?
// 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;
}
Ben
int main() {
int b[] = {0,1};
int *a = b;
swap(&a);
return 0;
}
Ayrıca her iki fonksiyonu aynı anda aynı dosyaya ait olmayan şöyle işlevini arıyorum.
İkinci işlevde çok yanlış bir şeyler yapıyorsunuz. – wRAR
Neden paramater aynı ada sahip yeni bir değişken adlandırma? Ikinci takas işlevinde int dizisi bildiren –
yeniden burada gönderme yaparken bir gözetim oldu. Onu sorudan kaldırdım. – robbmj