Xcode中的分段错误,调试器无法帮助我

时间:2011-09-28 12:31:36

标签: c xcode segmentation-fault

我一直在疯狂地想弄清楚做错了什么。我承认我在C方面缺乏经验,但我不知道出了什么问题。我访问/使用struct的方式是不正确的?

编辑:我一直在调试器中获得EXC_BAD_ACCESS。

#include <stdio.h>
#include <string.h>
#define MAX_STRING 20
#define MAX_PLYR 16

typedef struct {

        char pname[MAX_STRING];
        int runs;
        char *s;

} Team_t;

int
main(void) 
{
        Team_t *team_data[MAX_PLYR];
        int i;
        char *p;
        char name[MAX_STRING];
        FILE *inp;
        inp = fopen("teamnames.rtf", "r");

        for (i = 0; i < MAX_PLYR;) {
            while ((fgets(name, MAX_STRING, inp) != NULL));
            printf("Name(i): %s\n", name);
            strcpy(team_data[i]->pname, name);
            i++;
        }
        fclose(inp);
        return(0);
}

编辑:这是改变的,仍然会出现分段错误

#include <stdio.h>
#include <string.h>

#define MAX_STRING 20

#define MAX_PLYR 16


typedef struct {

char pname[MAX_STRING];
int runs;
char s;

} Team_t;

int
main(void) 

{
Team_t team_data[MAX_PLYR];

char name[MAX_STRING];

int i;

FILE *inp;

inp = fopen("teamnames.rtf", "r");

for (i = 0; i < MAX_PLYR; i++) {

    ((fgets(name, MAX_STRING, inp)));

    if (feof(inp)) {

        printf("End of stream\n");

        i = MAX_PLYR;

    }

    else {

        if (ferror(inp)) {

            printf("Error reading from file\n");
}

    printf("Name(i): %s\n", name);

    strcpy(team_data[i].pname, name);
}
}

fclose(inp);

return(0);
}

3 个答案:

答案 0 :(得分:0)

您声明team_data,但您没有分配它;因此它指向随机存储器,就像数组的虚构内容一样。你需要实际创建数组,比如

Team_t * team_data [MAX_PLYR] =(Team_t **)malloc(MAX_PLYR * sizeof(Team_t *));

答案 1 :(得分:0)

使用结构,而不是指针(或者如果你坚持使用指针为这些结构分配空间)

Team_t team_data[MAX_PLYR];

fgets(team_data[i].pname, MAX_STRING, inp)

答案 2 :(得分:0)

当你写

 Team_t *team_data[MAX_PLYR];

你没有为实际的Team_t记录分配任何内存,而是设置一个指向记录的指针数组。

相反,你会写

Team_t team_data[MAX_PLYR];

你会分配记录。当您想要复制到team_data数组时,请改为编写

strcpy( team_data[i].name, name );