【问题标题】:error, glibc detected错误,检测到 glibc
【发布时间】:2012-10-12 09:04:51
【问题描述】:

这是我的代码:

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

main(int argc, char *argv[])
{
  struct numbers_struct {
      char numbers_array[1000];
  };
  char Line[300];
  FILE *Fp;
  int i=0;
  long size;
  Fp=fopen("input2.txt","r");
  fscanf(Fp, "%ld", &size);
  struct numbers_struct *numbers = malloc(sizeof(struct numbers_struct) * size);
  while(!feof(Fp))
    {
      if (fgets(Line,1000,Fp)!=NULL)
        {
          strncpy(numbers[i].numbers_array,Line,1000);
          i++;
        }
    }
  int k;
  k=i;
  for(i=k-1;i>=0;i--)
  printf("%s",numbers[i].numbers_array);
  free(numbers);
  fclose(Fp);

  return 0;
}

当我运行它时,程序会打印出正确的输出,然后是这个错误消息:

*** glibc detected *** ./part2: double free or corruption (out): 0x08834170 ***
part2: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted (core dumped)

我做错了什么?

【问题讨论】:

    标签: glibc


    【解决方案1】:

    我做错了什么?

    你有corrupted heap

    诊断堆损坏的最佳方法是ValgrindAddressSanitizer。其中任何一个都应该直接指出问题所在。

    您的程序中有两个明显的错误:

    • fgets(Line,1000,Fp) -- Line 有多大,如果出现很长的一行,你会读到多少个字符?
    • struct numbers_struct *numbers = malloc(sizeof(struct numbers_struct) * size); -- 如果输入文件以 3 开头但包含 15 行会怎样?

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2011-06-21
      • 2015-12-19
      • 2016-07-22
      • 1970-01-01
      • 2014-07-02
      • 2012-10-25
      相关资源
      最近更新 更多