C-阵列中的malloc会产生分割故障



在我尝试理解malloc和结构时,我遇到了一个错误,我不了解

#include <stdio.h>
#include <stdlib.h>
typedef struct match
{
   int round;
} match;
void foo(match *matches) {
   for(int i = 0; i < 10; i++) {
      matches = (match *) realloc(matches, i + 1);
      matches[i].round = i + 1;
   }
}
int main()
{
   match *matches;
   matches = (match *) malloc(0);
   foo(matches);
   free(matches);
   return(0);
}

因此,在我尝试填充这种动态匹配的尝试时,它失败了

您的foo功能非常有缺陷。首先,参数传递了matches指针的副本,因此,当您进行realloc时,该副本会更新foo matches指针,而不是main中的matches指针。这可能会导致free的主要问题。您需要将参数更改为foo成为双重指针:void foo(match **matches)。然后到realloc, *matches = realloc(...

接下来,realloc的第二个参数是大小。但是i + 1将不够大,用于match结构的完整副本。您可能打算做诸如sizeof(struct match) * (i + 1)

之类的事情

i在上述答案中添加。很好的解释...在使用内存之前,请还检查Realloc的错误,

修改了程序

void foo(match **matches) {
   for(int i = 0; i < 10; i++) {
      *matches = realloc(*matches, (i+1) * sizeof(match));
      ...
   }
}
int main()
{
...
   foo(&matches);
...
}

相关内容

  • 没有找到相关文章

最新更新