分段故障核心转储gcc代码块

时间:2015-01-28 01:25:31

标签: c gcc

嗯,我的ubuntu系统有问题,我确定我的代码没有任何错误,但我在{i}尝试在大文字上使用segmentation fault时重新fseek文件,非常大,因为它的圣经。和gdb说fseek.c no such file or directory。所以有人可以告诉我,我怎么能在代码块中为我的程序设置更多内存,因为我认为它的内存问题,或者你有其他想法? 我试过usint ulimit有很多选项,但我不能设置更大的限制

void odpalBiblie()
{
    char *file_contents;
    long input_file_size;
    FILE *input_file = fopen("BIBLIA.TXT", "rb");
    fseek(input_file, 0, SEEK_END);
    input_file_size = ftell(input_file);
    rewind(input_file);
    file_contents = malloc(input_file_size * (sizeof(char)));
    fread(file_contents, sizeof(char), input_file_size, input_file);
    fclose(input_file);
    cnt_words(file_contents, 1000);
}

这是导致分段错误的函数,它恰好发生在fseek

1 个答案:

答案 0 :(得分:1)

我认为您不需要更多内存但当然您的程序可能会导致一些分段错误,因为您的代码非常不安全,这将是您程序的安全版本

void odpalBiblie()
{
    char *file_contents;
    long  input_file_size;
    FILE *input_file;

    input_file = fopen("BIBLIA.TXT", "rb");
    if (input_file == NULL)
    {
        fprintf(stderr, "ERROR: el archivo BIBLIA.TXT no se puedo abrir.\n");
        return;
    }
    fseek(input_file, 0, SEEK_END);

    input_file_size = ftell(input_file);

    rewind(input_file);
    /* 1 + input_file_size por el '\0' que debe ir al final */
    file_contents = malloc(1 + input_file_size);
    if (file_contents == NULL)
    {
        fprintf(stderr, "ERROR: el sistema no tiene suficiente memoria.\n");
        fclose(input_file);

        return;
    }
    /* si vas a usar cualquier función del header strnig.h 
    * debes sellar el buffer con '\0'.
    */
    file_contents[input_file_size] = '\0';

    fread(file_contents, 1, input_file_size, input_file);    
    fclose(input_file);

    cnt_words(file_contents, 1000);
}

您必须检查每个可能的故障,例如,如果文件不存在或当前用户无法读取,您将有未定义的行为,这可能会导致分段错误。

检查理论上无法避免问题的每个功能,无论故障发生的可能性有多大。