【问题标题】:SIGSEGV fault when opening file打开文件时出现 SIGSEGV 错误
【发布时间】:2013-03-31 18:01:14
【问题描述】:

在第 42 行,我收到信号 Program received signal SIGSEGV, Segmentation Fault

从我所做的研究来看,我认为这与我的指针有关,但我真的不知道。

这是调试期间的调用堆栈:

#0 7560ECC0 strxfrm_l() (C:\windows\syswow64\msvcrt.dll:??)
#1 75665864 putwchar() (C:\windows\syswow64\msvcrt.dll:??)
#2 756658D4 msvcrt!fscanf() (C:\windows\syswow64\msvcrt.dll:??)
#3 00401494 readFile(filename=0x404024 <_Jv_RegisterClasses+4210724> "C:\\input.txt", seed=0x75601162 <onexit+53>, minSize=0x75655bc4 <msvcrt!atexit+13>, maxSize=0x401ef0 <__do_global_dtors>, count=0x28ff94) (C:\Users\xxxxx\Dropbox\School\Spring 13\Computer Sci\Project 4_Pxxxxxx\main.c:42)
#4 00401375 main() (C:\Users\xxxxx\Dropbox\School\Spring 13\Computer Sci\Project 4_Pxxxxxxxx\main.c:28)

相关代码:

这里是main():

int main()
{
    int array[4], min, max, Ans, avg, count;

    readFile("C:\\input.txt", array[0], array[1], array[2], array[3]);
    validateInput(array[0], array[1], array[2], array[3]);
    generateNumbers(array, array[0], array[1], array[2], array[3]);
    calculateStatistics(array, 4, min, max, Ans, avg);
    printReport(array, 4, array[1], count, min, max, Ans, avg);

}

35 bool readFile(char *filename, int *seed, int *minSize, int *maxSize, int *count)
36 {
37    int readCount;
38    FILE *fp; // FILE must be ALL CAPS
39    bool status = true;
40
41    fp=fopen("input.txt", "r"); // Opens the file for reading
42    readCount = fscanf(fp, "%d %d %d %d", seed, minSize, maxSize, count);
43    if(readCount != 4)
44    {
45        printf("At least one of the supplied values is invalid.\n");
46        status = false;
47    }
48    fclose(fp); // Closes the file
49    return status;
50 }

程序试图做的是打开该文件并将值传递给另一个函数以生成随机数数组。

【问题讨论】:

  • fopen 可能失败并且fpNULL。或者您传递的指针之一是错误的。
  • 您正在传递一个“文件名”参数,但没有使用它。这是故意的吗?
  • 顺便说一下,那个文件名应该是const char *
  • 向我们展示main函数的实现。我认为你的一个指针是无效的。
  • 如果文件不存在,fopen 模式 'r' 将失败并返回NULL。您必须检查该错误。

标签: c file segmentation-fault


【解决方案1】:

这一行

readFile("C:\\input.txt", array[0], array[1], array[2], array[3]);

是罪魁祸首。您正在传递值而不是指向值的指针。试试这个:

readFile("C:\\input.txt", &array[0], &array[1], &array[2], &array[3]);

【讨论】:

  • 这行得通。谢谢杰里米!我真的需要处理我的指针
  • @alk 是的,我自己就是这么想的。应该有至少一个警告。
  • @user2053164:有时遵循警告已经有所帮助! ;-)
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多