简单c程序出现断错误

软件和网站开发以及相关技术探讨
回复
me
帖子: 972
注册时间: 2007-09-14 19:51

简单c程序出现断错误

#1

帖子 me » 2007-12-09 19:46

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; 
}
怎么回事?
谢谢帮助
me
帖子: 972
注册时间: 2007-09-14 19:51

#2

帖子 me » 2007-12-09 19:54

自己顶,是不是缓冲区太小了?
怎么设置,谢谢!
头像
晶晶守护神
帖子: 705
注册时间: 2007-12-02 14:09

#3

帖子 晶晶守护神 » 2007-12-09 19:59

数组太大了吧~~~
me
帖子: 972
注册时间: 2007-09-14 19:51

#4

帖子 me » 2007-12-09 20:03

晶晶守护神 写了:数组太大了吧~~~
怎么解决?
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#5

帖子 BigSnake.NET » 2007-12-09 20:07

char a[70000][256];
栈爆掉了..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
me
帖子: 972
注册时间: 2007-09-14 19:51

#6

帖子 me » 2007-12-09 20:11

BigSnake.NET 写了:char a[70000][256];
栈爆掉了..
怎么解决呢?
那个文本怎么读取呢?
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#7

帖子 BigSnake.NET » 2007-12-09 20:17

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;
}
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
me
帖子: 972
注册时间: 2007-09-14 19:51

#8

帖子 me » 2007-12-09 20:23

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;
}
依然是断错误
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#9

帖子 BigSnake.NET » 2007-12-09 20:25

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. 数据有没有超?
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
me
帖子: 972
注册时间: 2007-09-14 19:51

#10

帖子 me » 2007-12-09 20:45

谢谢LS
搞定了
是文本文件弄错了
回复