分页: 1 / 1

简单c程序出现断错误

发表于 : 2007-12-09 19:46
me
1.txt 有6万多行
每行有1百多个字

运行下面程序出现
段错误 (core dumped)

代码: 全选

#include<stdio.h>
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        char a[70000][256];
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        return 0; 
}
怎么回事?
谢谢帮助

发表于 : 2007-12-09 19:54
me
自己顶,是不是缓冲区太小了?
怎么设置,谢谢!

发表于 : 2007-12-09 19:59
晶晶守护神
数组太大了吧~~~

发表于 : 2007-12-09 20:03
me
晶晶守护神 写了:数组太大了吧~~~
怎么解决?

发表于 : 2007-12-09 20:07
BigSnake.NET
char a[70000][256];
栈爆掉了..

发表于 : 2007-12-09 20:11
me
BigSnake.NET 写了:char a[70000][256];
栈爆掉了..
怎么解决呢?
那个文本怎么读取呢?

发表于 : 2007-12-09 20:17
BigSnake.NET
me 写了:
晶晶守护神 写了:数组太大了吧~~~
怎么解决?
移到全局区

代码: 全选

#include<stdio.h>
char a[70000][256];
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        return 0;
}
或者自己分配

代码: 全选

$ cat  test.c
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        char (*a)[256] = malloc(70000*256*sizeof(char));
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        free(a);
        return 0;
}

发表于 : 2007-12-09 20:23
me
BigSnake.NET 写了:
me 写了:
晶晶守护神 写了:数组太大了吧~~~
怎么解决?
移到全局区

代码: 全选

#include<stdio.h>
char a[70000][256];
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        return 0;
}
或者自己分配

代码: 全选

$ cat  test.c
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        char (*a)[256] = malloc(70000*256*sizeof(char));
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        free(a);
        return 0;
}
依然是断错误

发表于 : 2007-12-09 20:25
BigSnake.NET
me 写了:
BigSnake.NET 写了:
me 写了:
晶晶守护神 写了:数组太大了吧~~~
怎么解决?
移到全局区

代码: 全选

#include<stdio.h>
char a[70000][256];
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        return 0;
}
或者自己分配

代码: 全选

$ cat  test.c
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
        FILE *fp;
        fp = fopen ("1.txt","r");
        char (*a)[256] = malloc(70000*256*sizeof(char));
        long b;
        for(b=0;b!=70000;b++)
        {
                fgets(a[b],256,fp);
        }
        printf("%s",a[8888]);
        free(a);
        return 0;
}
依然是断错误
1. 重新编译了吗?
2. 数据有没有超?

发表于 : 2007-12-09 20:45
me
谢谢LS
搞定了
是文本文件弄错了