首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

程序运行却出现core jump,求指点

2013-12-28 
程序运行却出现core jump,求指导本想写一个文件读写的程序,我用fwrite写入,但在fread读取时 却出现了错误

程序运行却出现core jump,求指导
程序运行却出现core jump,求指点
本想写一个文件读写的程序,我用fwrite写入,但在fread读取时 却出现了错误
求指导
#include <stdio.h>
#include <stdlib.h>
#define MAX_NAME 40
#define MAX_NUM 40
#define MAX_EMAIL 70
#define MAX_ADDRESS 100
#define MAX_CARDS 10
struct card {
        char name[MAX_NAME];
        char number[MAX_NUM];
        char email[MAX_EMAIL];
        char address[MAX_ADDRESS];
};
int main()
{
        struct card my_cards[MAX_CARDS];
        FILE *pcards;
        int count;
        int size;
        int filecount;
        filecount=0;
        count=MAX_CARDS;
        size=sizeof(struct card);
        pcards=fopen("card.dat","r");
        rewind(pcards);
        while(filecount<MAX_CARDS)
        {
                fread(&my_cards[filecount],size,count-filecount,pcards);
                printf("%d:%s\n%s\n%s\n%s\n",filecount,my_cards[filecount].name,my_cards[filecount].number,my_cards[filecount].email,my_cards[filecount].address);
                filecount++;
        }
        return 0;

}
~                
[解决办法]
进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core或core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令

[解决办法]
是你的rewind()函数这里导致的。

pcards=fopen("card.dat","r");
之后要做NULL check
  pcards=fopen("card.dat","r");
        if(pcards == NULL) {
            exit(0);
        }
        rewind(pcards);


[解决办法]

 fread(&my_cards[filecount],size,count-filecount,pcards);
// 循环读这里 ,你第一次已经全部读完了啊,不明白

热点排行