为什么在动态分配期间此代码会崩溃?

gia*_*ote 0 c malloc

我在下面有这个代码片段,它在动作分配'str'的赋值期间崩溃了.

  char *str;
  int file_size;
  FILE *fptr;
  if (!(fptr = fopen(filename, "r"))) goto error1;
  if ((fseek(fptr, 0L, SEEK_END) != 0)) goto error2;
  if (!(file_size=ftell(fptr))) goto error2;
  if ((fseek(fptr, 0L, SEEK_SET) != 0)) goto error2;
  str =  (char*)malloc(file_size+1);
  if (fread(str, file_size, 1, fptr) != 1) {
    free(str);
    goto error2;
  }
  str[file_size] = '\0';
  fclose(fptr);
Run Code Online (Sandbox Code Playgroud)

file_size是非零,非负的小于140的值

我正在使用ARM.这实际上适用于我的intel pc,但不适用于arm机器.

小智 7

您可以在手册中看到这一点 - ftell()在出错时返回-1,而不是零.