这fgets(myDiscPointer->songArray[0], 21, stdin);
导致我的程序崩溃。我的结构中有以下内容。
typedef struct
{
char Artist[21];
char Album[21];
int Year;
char **songArray;
}CD;
我宣布以下
CD myDisc;
CD *myDiscPointer = &myDisc;
另一件事是我的#define被Xcode抱怨。
#define MAXCHARATCERS 21
当我使用它时,这被视为未声明。
答案 0 :(得分:2)
您没有为songArray
分配内存,这会导致程序在写入随机位置时崩溃。
答案 1 :(得分:1)
你如何为songArray
分配内存?你需要这样的东西:
#define MAXARTIST 20
#define MAXALBUM 20
typedef struct
{
char Artist[MAXARTIST+1];
char Album[MAXALBUM+1];
int Year;
int songs;
char **songArray;
} CD;
CD *allocCD(char const * const artist, char const * const album, int year)
{
CD *cd = malloc(sizeof(*cd));
if(!cd)
return 0;
strncpy(cd->Artist, artist, MAXARTIST);
strncpy(cd->Album, album, MAXALBUM);
cd->Year = year;
cd->songs = 0;
cd->songArray = 0;
return cd;
}
int addSongToCD(CD * const cd, char const * const song)
{
char **newArray;
char *newSong;
newSong = malloc(strlen(song)+1);
if(!newSong)
return 0;
strdup(newSong, song); /* strdup uses strlen so malloc(strlen(...)+1) is sufficient, no need for the strndup max length safety net */
newArray = realloc(cd->songArray, sizeof(newArray*) * (cd->songs + 1));
if(!newArray) {
free(newSong); /* don't leak memory */
return 0;
}
cd->songArray = newArray;
cd->songArray[cd->songs++] = newSong;
return cd->songs;
}
void freeCD(CD * const cd)
{
int i;
for(i=0; i < cd->songs; ++i) {
free(cd->songArray[i]);
}
free(cd->songArray);
}
答案 2 :(得分:0)
你之后没有使用MAXCHARACTERS
吗?可能是因为拼写错误。
答案 3 :(得分:0)
关于#define,MAXCHARATCERS似乎是一个错字 (最后的c和t是相反的)。这只是一个拼写错误,还是在你的代码中导致问题的拼写错误?