首页 > 解决方案 > 如何在带有结构的 C 中的 if/else 循环中使用 realloc?

问题描述

我在 C 语言中有一个问答游戏,当用户输入错误答案和该问题的相应正确答案时,我使用结构来保存。首先,我使用 malloc 为单个结构分配内存。

结构:

  typedef struct
  {
      char* wrongAnswers;
      char* corrections;
  } Corrections;

马洛克:

  Corrections* corrections = (Corrections*)malloc(sizeof(Corrections));

稍后在我的程序中,我有一个功能,错误答案会增加一个“incorrectAnswers”变量,该变量用于重新分配内存以允许存储新的错误答案及其相应的正确答案。

代码:

// Extract characters from file and store in character c 
for (c = getc(fPointerOpen); c != EOF; c = getc(fPointerOpen)) {
if (c == '\n') // Increment count if this character is newline 
        numberOfLines++;
}

for (int i = 0; i < numberOfLines; i++) {
    int lengthOfQuestion = 150;

    if (v == 0) {
        printf("Correct\n");
        score++;
    }
    else {
        printf("Incorrect\n");
        incorrectAnswers++;

        corrections = (Corrections*)realloc(corrections, incorrectAnswers * sizeof(Corrections));
        corrections[i].wrongAnswers = malloc(sizeof(char) * lengthofanswer);
        corrections[i].wrongAnswers = lines[i].userAnswers;
        corrections[i].corrections = malloc(sizeof(char) * lengthofanswer);
        corrections[i].corrections = lines[i].answers;

    }
    printf("Your score is %d/%d\n", score, (i + 1));
  }

我收到一个错误,具体取决于输入正确和错误答案的顺序。我已经尝试在程序的不同部分使用 free() 并且我注意到当我输入错误答案作为我程序的最后一个条目/如果我输入正确然后错误的答案时,该错误将始终出现。为什么会这样?我的理解是我执行 realloc 不正确。

标签: cmallocrealloc

解决方案


您应该使用strcpy复制字符串,不要使用=在 c 中分配字符串。

strcpy(corrections[i].wrongAnswers,lines[i].userAnswers);

strcpy(corrections[i].corrections,lines[i].answers);

每次使用mallocorrealloc时,都应该检查这些函数的返回值。


推荐阅读