vfscanf.c没有这样的文件或目录

时间:2018-03-06 10:44:39

标签: c

从书中学习malloc(),我在书上试了一个例子。以下是exmaple的代码。

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

int main(void)
{
  double * ptd;
  int max;
  int number;
  int i=0;

  puts("how many double values will you enter?");
  if (scanf("%d",&max)!=1)
  {
    puts("Input not proper.");
    exit(EXIT_FAILURE);
  }
  ptd=(double *) malloc(max*sizeof(double));
  if (ptd=NULL)
  {
    puts("Failed to assign memory.");
    exit(EXIT_FAILURE);
  }
  puts("Enter values(q to exit)");
  while (i<max && scanf("%lf", ptd+i)==1) i++;

  printf("The following %d numbers are what you entered:\n",number=i);
  for (i=0; i<number; i++)
  {
    printf("%7.2f ",ptd[i]);
    if (i%7==6) putchar('\n');
  }

  if (i%7!=0) putchar('\n');
  free(ptd);
  puts("Bye!");
  return 0;
}

然后我用gcc编译了这个并运行它。起初它似乎工作正常,但是当我输入双值(第23,24行)时,第26行的消息没有出来。所以我通过gdb调试它,我遇到了一个错误:

vfscanf.c:没有这样的文件或目录。

编辑以下是输入并导致gdb。

how many double values wil you enter?
5
Enter values(q to exit)
1.2 2.3 3.4 4.5 5.6

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a6a4cf in _IO_vfscanf_internal (s=<optimized out>,
    format=<optimized out>, argptr=argptr@entry=0x7fffffffe0a8,
    errp=errp@entry=0x0) at vfscanf.c:2444
2444    vfscanf.c: No such file or directory.

The possible duplicate in the question似乎无法解决我的问题。

错误意味着什么,我该如何解决?

1 个答案:

答案 0 :(得分:1)

您的代码中存在错误:

if (ptd=NULL)

而不是测试前一次调用malloc是否成功,而是将ptd设置为NULL,然后在尝试取消引用指针时导致崩溃。你的书有错误或者在复制代码时犯了错误 - 这一行当然应该是:

if (ptd == NULL)

注意:如果您启用了编译器警告(例如gcc -Wall ...),那么编译器会向您指出这一点,并为您节省了很多悲伤。始终启用编译器警告,并始终关注它们。