Bir işlev içinde struct player
s değişken uzunlukta bir arabellek başlatmalıyım. Şimdiye kadar bu ile geldi budur:Bir işlev içinde yığında bir yapı oluşturma ve onu başka bir işlevde oluşturulmuş bir dizinin bir dizinin konumuna atama
#include<stdio.h>
#include<stdlib.h>
struct player{
char name;
};
void players_init(struct player **players){
*players = malloc(2 * sizeof(struct player));
struct player p1, p2;
p1.name = 'X';
p2.name = 'Y';
(*players)[0] = p1;
(*players)[1] = p2;
}
int main(int argc, char *argv[])
{
struct player *players = NULL;
players_init(&players);
printf("%c\n", players[0].name); // prints X
printf("%c\n", players[1].name); // prints Y
return 0;
}
Sorum edilir: Ben bir işlev içinde p1
ve p2
oluşturuyorsam beri, bu iki değişken aynı işleve adanmış yığın çerçeve üzerinde tahsis edilmelidir, Bu işlev sona erdiğinde, bu değişkenler gitmelidir.
Örneğimde gördüğünüz gibi, bu değişkenleri başka bir işlevde oluşturulan arabellek players
arabelleklerine atayım.
Kodumun neden işe yaradığını merak ediyorum (gerçekten işe yarıyorsa), çünkü temelde, players_init
sonlandırıldığında, benim anlayışımdan artık olmamak zorunda olan değişkenlere başvuruyorum.
Neyi eksik?
Yap ' zaman, ve kullanmak için bir 'char' adı geçmek. O zaman şöyle adlandırın: 'players_init (& players, 'X'); players_init (& players, 'Y'); ' Bu, kodunuzun beklediğiniz gibi kırılmasını engelleyecektir, çünkü varolan kodunuzun düzgün çalışmasına izin vermek üzere takılan başlatılmamış belleğin üzerine yazılacaktır. – sehrgut