无法写入引用的内存

时间:2017-02-19 07:42:52

标签: c memory struct runtime-error

每当我运行这个结构时,我可以到达你输入构造修饰符的行,程序崩溃时会弹出一个窗口,该窗口读取" 0x00000000775AFDE9处的指令引用了0x000000007758D250处的内存。无法写入内存。按“确定”终止。"这是有问题的结构:

struct player_info create_player(void);
struct player_info{
    char name[30];
    int Level, Str, Dex, Con, Int, Wis, Cha;
};

struct player_info create_player(void){
    struct player_info aPlayer;
    {
        char c;
        int i;
        printf("Enter Player Name: ");
        scanf("%s",aPlayer.name);
        i = strlen(aPlayer.name);
        do{
            scanf("%c", &c);
            aPlayer.name[i++] = c;
        }
        while (c != '\n');
        aPlayer.name[i - 1] = 0;
    }

    printf("Level: ");
    scanf("%d",aPlayer.Level);

    printf("Strength Modifier: ");
    scanf("%d",aPlayer.Str);

    printf("Dexterity Modifier: ");
    scanf("%d", aPlayer.Dex);

    printf("Constitution Modifier: ");
    scanf("%d", aPlayer.Con);

    printf("Intelligence Modifier: ");
    scanf("%d", aPlayer.Int);

    printf("Wisdom Modifier: ");
    scanf("%d", aPlayer.Wis);

    printf("Charisma Modifier: ");
    scanf("%d", aPlayer.Cha);
    return aPlayer;
};

写位:

int save_data(){
             FILE* PlayerFile = fopen("players.txt","w");
             int i = 0;

             for (i = 0; i < 1; i++){
             struct player_info aPlayer = create_player();
             fprintf(PlayerFile, "%s %d %d %d %d %d %d %d\n", aPlayer.name, aPlayer.Level, aPlayer.Str, aPlayer.Dex, aPlayer.Con, aPlayer.Int, aPlayer.Wis, aPlayer.Cha);
             }
             fclose(PlayerFile);
             return 0;
             }

现在,要清楚,我可以输入灵巧修饰符。应该要求宪法的下一行不会打印,而且当我收到弹出错误时就是这样。

我试过评论从宪法模式到魅力的一切,只是为了看,我也遇到了同样的问题。仅删除构成部分也不起作用。我不确定这里发生了什么;我看过其他帖子说过指针有问题,但是我没有看到类似的东西,除非它只是你错过的那些东西之一,需要别人指点出。无论如何,任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:4)

scanf期望您要写入的变量的地址。所以这个

scanf("%d",aPlayer.Level);

应该是这个

scanf("%d", &aPlayer.Level);

对于您的所有统计数据。现在设置它的方法包括将未指定的整数值传递给scanf(变量aPlayer.Level并且公司未初始化),然后将其重新解释为函数尝试写入的地址。此类代码的行为未定义。