程序运行后出现,段错误,核心已转储。整了一晚上没解决,求大神帮个

程序运行后出现,段错误,核心已转储。整了一晚上没解决,求大神帮个忙看看。。代码如下:#include <stdio.h>
#include<stdlib.h>
#include "cJSON.h"

char *get_json_data()
{
FILE *f_json;
long json_size;
char *json_data;
const char *jsonfile = "/home/szd/byjson/jsonfile";

f_json = fopen(jsonfile, "r");
fseek(f_json, 0, SEEK_END);//将指针移动到文件尾部
json_size = ftell(f_json);//当前指针位置相对于文件首部偏移的字节数
fseek(f_json, 0, SEEK_SET);//将指针移动到文件首部
json_data = (char *)malloc(json_size);//向系统申请分配指定size个字节的内存空间
fread((void *)json_data, json_size, 1, f_json);//将f_json中的数据读入中json_data中
fclose(f_json);
f_json = NULL;
return(json_data);
}

int main()
{
char *p = get_json_data();
printf("%s\n", p);
return 0;
}
我是在Ubuntu下运行的,感觉应该是fseek,ftell那里出错了,可是我看不出来啊,求指教。

第1个回答  2016-12-11
能不能把文件放到程序文件夹下?用相对路径搞一下。你先一步步debug行吗?打开文件一定成功吗?分配内存一定成功吗?读取空间是不是会少一个?
你不是说了能在win下运行成功吗,那八成是文件都没正常打开吧。。。。追问

这是我gdb的结果,然后还是不知道什么鬼

追答

这难道是库文件不全?你看看你的编译器的库文件文件夹,里面到底有没有那个fseek.c文件?

本回答被网友采纳

linux下,gcc提示“段错误 (核心已转储)”,ubuntu刚上手不大会用,谁说...
一、内存访问出错 这类问题的典型代表就是数组越界。二、非法内存访问 出现这类问题主要是程序试图访问内核段内存而产生的错误。三、栈溢出 Linux默认给一个进程分配的栈空间大小为8M。c++申请变量时,new操作申请的变量在堆中,其他变量一般在存储在栈中。因此如果数组开的过大变会出现这种问题。

段错误 (核心已转储),求大神解决啊!!!
首先,对计算机进行全面的病毒扫描,确保使用最新版杀毒软件如冷林易在安全模式下运行,以清除潜在威胁。接着,进行磁盘清理和碎片整理,通过操作如在“我的电脑”中进行清理,删除临时文件,使用优化工具如优化大师或超级兔子进行注册表和垃圾文件管理。启动项也需要优化,通过msconfig关闭非必要的启动程序。进...

段错误 (核心已转储) 笔记
第一种情况是使用system V共享内存,尽管只赋予了读权限,但仍然尝试向共享内存写入数据。第二种情况是使用指针时,没有对其进行初始化,就进行了fgets操作。当运行可执行文件时,出现了“段错误 (核心已转储)”的提示。"段错误 (核心已转储)"是一种常见的运行时错误,通常表明程序访问了无效的内存地址。

linux下gcc 编程 段错误(核心已转储) 大神救我,折磨我一天了...
1. ulimit -c unlimited 2. 在用gcc编译时,在最后加上-g 3. 运行一次错误代码,出现段错误后, 目录中有一个core文件 4. 运行:gdb .\/a.out core 会自动帮你找出可能出错的代码,出现段错误一般都是越界了

运行以下C语言代码,为什么会出现段错误(核心已转储)?
问题主要在于你int *w;后只是定义了一个指针,并没有给w分配空间,而你又给*w赋值,导致内存错误了 你的fun函数里,w为什么要定义成一个指针呢 直接 int w;就可以了

输出后出现段错误核心已转储是什么意思??
字符串拷贝出错

nachos c++的文件系统中,横线这句执行的时候出现段错误(核心已转储)
核心转储一般是由于内存访问异常(违规访问等)这个案例中,横线句子是一个项内存中写入内容的代码,您能保证对目标内存区块完全的写权限(检查指针是否未初始化),并且目标区块长度足够吗?

Linux下出现核心段错误。如下,我一将字符a赋值过去就出现核心段错误,已...
首先char *s;这个定义一个指针,而指针的含义是指向一个地址。char *s;这个定义,仅仅定义了一个指针,至于这个指针指向哪块地址没定义。所以系统可能默认给s随机赋值。s = 'a';这句话的含义是往指针s指向的内存存储字符a,而是指针s指向的内存都不知道是哪块,所以会出现段错误。

C语言 文件方面 段错误 核心已转储 以及字符串查找删除的问题_百度知 ...
文件在读取了你的字符串后,文件指针位置已经到了该字符串后面,如果puts则会在字符串后面输出,比如:文件内容是aaaa\\nbbbb\\ncccc\\n,你读到bbbb行后,文件指针指向cccc\\n的首字符,如果puts的话会覆盖cccc\\n。按照设计目的,你应当让文件指针返回字符串bbbb\\n的首字符再输出。在输出了覆盖字符串后...

linux编程 段错误 (核心已转储)
include"stdio.h"#include"stdlib.h"#define NMEMB 50#define SIZE 10#include <string.h>int compar (const void *a,const void *b){return (strcmp((char *) a, (char *) b));}int main(){ char data[NMEMB][SIZE]={"Linux","freebsd","solzris","sunos","windows"}; char...

相似回答