在ubuntu上使用C进行分段故障核心转储

时间:2013-02-01 15:01:04

标签: c ubuntu segmentation-fault

我在使用简单的C编写的代码行中遇到了问题。 它在Windows上工作正常,但在ubuntu上有一个错误说“Segmentation Fault(core dumped)”。我已经搜索了答案,但是有太多问题导致了这个错误。

char line[80];
char sett[50][80];
int index=0;
static const char filename[] = "squid.conf";
FILE *file = fopen ( filename, "r" );

while ( fgets ( line, sizeof line, file ) != NULL ) 
{
    strcpy(sett[index],line);
    index++;
}

我只想简单地将整个文件逐行写入二维数组。 如果我引用//strcpy(sett[index],line);,程序运行正常,没有错误。

1 个答案:

答案 0 :(得分:1)

正如其他人所说,也许你的squid.conf有超过50行,(我的squid.conf有4948行)

您可以计算之前的行数和malloc(nlines * 80),也可以使用链接列表:

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

typedef struct sett {
    char value[80];
    struct sett *next;
} sett;

int main(void)
{
    char line[80];
    sett *curr, *first = NULL, *prev = NULL;
    static const char filename[] = "squid.conf";
    FILE *file = fopen(filename, "r");

    while (fgets(line, sizeof line, file) != NULL) {
        curr = malloc(sizeof(sett));
        if (curr == NULL) {
            perror("malloc");
            exit(EXIT_FAILURE);
        }
        if (prev) {
            prev->next = curr;
        } else {
            first = curr;
        }
        strcpy(curr->value, line);
        curr->next = NULL;
        prev = curr;
    }
    fclose(file);
    curr = first;
    while (curr) {
        printf("%s", curr->value);
        prev = curr;
        curr = curr->next;
        free(prev);
    }
    return 0;
}