OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2835|回复: 8

C语言中报错:段错误(核心已转储),是怎么一回事?忘高人指点。贴下程序

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-9-15
在线时间
4 小时
发表于 2016-9-27 22:02:20 | 显示全部楼层 |阅读模式
1金钱
#include <stdio.h>
#include <string.h>
typedef struct
{
     char name[120];
     int age;
     int salary;
}EML;
int func(EML* eml)
{
     return (eml->salary = eml->age*380);
}
int main()
{
     EML* eml;
     strcpy(eml->name,"ABC");
     eml->age = 30;
     func(eml);
     return 0;
}

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]int main() { EML* eml; eml = malloc(sizeof(EML)); if(!eml) { printf("no momory for EML\n"); return -1; } strcpy(eml->name,"ABC"); eml->age = 30; func(eml); return 0; }[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3720
金钱
3720
注册时间
2011-5-23
在线时间
2012 小时
发表于 2016-9-27 22:02:21 | 显示全部楼层
[mw_shl_code=c,true]int main()
{
    EML* eml;
     
        eml = malloc(sizeof(EML));
        if(!eml)
        {
                printf("no momory for EML\n");
                return -1;
        }
         
    strcpy(eml->name,"ABC");
    eml->age = 30;
    func(eml);
        
    return 0;
}[/mw_shl_code]
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-9-15
在线时间
4 小时
 楼主| 发表于 2016-9-27 22:21:13 | 显示全部楼层
aozima 发表于 2016-9-27 22:09
[mw_shl_code=c,true]int main()
{
    EML* eml;

为什么得用malloc来申请内存,直接用EML* eml 不会分配内存吗?新手,不是很懂,谢谢。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-8-4
在线时间
4 小时
发表于 2016-9-27 22:33:23 | 显示全部楼层
你定义的是指针变量,定义这个变量分配的内存是用来存放一个你要指向的数据类型(你这个是结构体)的 地址,而不是一个存放结构体地内存。而且,你没有给指针赋值,就直接使用了指针,所以会出错。我也不是很专业,但应该是这个意思。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-9-15
在线时间
4 小时
 楼主| 发表于 2016-9-27 22:48:49 | 显示全部楼层
路人甲乙丙丁 发表于 2016-9-27 22:33
你定义的是指针变量,定义这个变量分配的内存是用来存放一个你要指向的数据类型(你这个是结构体)的 地址 ...

谢谢!!
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2016-9-28 03:56:52 | 显示全部楼层
aozima 发表于 2016-9-27 22:02
[mw_shl_code=c,true]int main()
{
    EML* eml;
}[/mw_shl_code]

好像没进行指针类型转换,
malloc的返回类型好像是void*,
而且没有释放内存。

我估计用下面的方法可以
[mw_shl_code=c,true]int main()
{
    EMLeml;     
strcpy(eml.name,"ABC");
    eml.age = 30;
    func(&eml);
         
    return 0;
}[/mw_shl_code]
回复

使用道具 举报

17

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2016-7-1
在线时间
94 小时
发表于 2016-9-28 08:25:46 | 显示全部楼层
应该是由于操作了一个没有赋值的指针,才导致了段错误
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-9-15
在线时间
4 小时
 楼主| 发表于 2016-9-28 09:12:39 | 显示全部楼层
mack13013 发表于 2016-9-28 03:56
好像没进行指针类型转换,
malloc的返回类型好像是void*,
而且没有释放内存。

谢谢!!
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-9-15
在线时间
4 小时
 楼主| 发表于 2016-9-28 11:18:38 | 显示全部楼层
carey32 发表于 2016-9-28 08:25
应该是由于操作了一个没有赋值的指针,才导致了段错误

嗯,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 18:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表