[英]Program received signal: “EXC_BAD_ACCESS”
这个fgets(myDiscPointer->songArray[0], 21, stdin);
导致我的程序崩溃。 我的结构中包含以下内容。
typedef struct
{
char Artist[21];
char Album[21];
int Year;
char **songArray;
}CD;
我声明以下内容
CD myDisc;
CD *myDiscPointer = &myDisc;
发生的另一件事是Xcode抱怨了我的#define。
#define MAXCHARATCERS 21
当我使用它时,这被视为未声明。
您没有为songArray
分配内存,这会导致在您写入随机位置时程序崩溃。
您在哪里为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);
}
之后您没有使用MAXCHARACTERS
吗? 可能是因为错字。
关于#define,MAXCHARATCERS似乎是一个错字(最后一个c和t颠倒了)。 这只是这里的错字,还是错字也会在您的代码中引起问题?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.