OpenEdv-开源电子网

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

代码错误

[复制链接]

29

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-12-12
在线时间
26 小时
发表于 2019-3-13 17:39:39 | 显示全部楼层 |阅读模式
10金钱

    u8 *BlackImage, *RedImage;
    u16 Imagesize = 0x7800;
    if((BlackImage = (u8*)malloc(Imagesize / 2)) == NULL) {
        printf("Failed to apply for black memory...\r\n");
        return -1;
    }
    if((RedImage = (u8*)malloc(Imagesize / 2)) == NULL){
        printf("Failed to apply for red memory...\r\n");
        return -1;
    }
为什么程序里加了这段代码 单步调试时会进入
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {}
}
出现这样的错误




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-3-13 17:41:13 | 显示全部楼层
可能内存分配出现问题
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7573
金钱
7573
注册时间
2016-11-30
在线时间
643 小时
发表于 2019-3-13 17:44:13 | 显示全部楼层
指针用对了吗?
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-3-13 18:06:20 | 显示全部楼层
仿真,看call stack,估计访问了非法的地址
啊哈~加油!!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2018-9-6
在线时间
37 小时
发表于 2019-3-13 18:35:43 | 显示全部楼层
你的这个NULL判断有意义吗??
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2018-9-6
在线时间
37 小时
发表于 2019-3-13 18:36:59 | 显示全部楼层
你的这个NULL判断, 有问题吧.

NULL 不是应该对返回的的指判断吗?
你怎么是对一个赋值语句进行判断???
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-13 20:11:07 | 显示全部楼层
估计是申请内存失贩, 不是有打印嘛, 看看打印出什么来
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-13 20:11:32 | 显示全部楼层
IoTCatcher 发表于 2019-3-13 18:36
你的这个NULL判断, 有问题吧.

NULL 不是应该对返回的的指判断吗?

这样的判断没问题
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2018-9-6
在线时间
37 小时
发表于 2019-3-14 08:57:02 | 显示全部楼层
本帖最后由 IoTCatcher 于 2019-3-14 09:05 编辑
edmund1234 发表于 2019-3-13 20:11
这样的判断没问题

嗯, 不至于崩.
我觉得楼主这个判断有点像  if ( (a = b) == NULL ).

正常应该这样吧?
    u8 *BlackImage;
    u16 Imagesize = 0x7800;
    BlackImage = (u8*)malloc(sizeof(u8) * (Imagesize / 2));
    if (NULL == BlackImage) {
        printf("Failed to apply for black memory...\r\n");
        return -1;
    }

回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2018-9-6
在线时间
37 小时
发表于 2019-3-14 09:00:47 | 显示全部楼层
楼主, 你是裸机没有写内存管理就直接用malloc吗?

如果你是再PC端用VS等IDE调试, 使用#include <stdlib.h>的话, 应该是能运行的.
但是如果你是再裸机, 没有写内存管理模块, 直接这样调用malloc是不行的.
回复

使用道具 举报

17

主题

237

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1312
金钱
1312
注册时间
2017-3-1
在线时间
259 小时
发表于 2019-3-14 09:23:23 | 显示全部楼层
原子好像有mymalloc例程
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-14 10:15:15 | 显示全部楼层
IoTCatcher 发表于 2019-3-14 08:57
嗯, 不至于崩.
我觉得楼主这个判断有点像  if ( (a = b) == NULL ).

这种语法很常用的, 没有正常不正常这么一说
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2019-3-14 11:13:15 | 显示全部楼层
不要写这么复杂的表达式,很容易出问题,把你的分配空间跟判断是否分配成功分开写两句很费劲吗?
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2018-9-6
在线时间
37 小时
发表于 2019-3-14 12:04:17 | 显示全部楼层
edmund1234 发表于 2019-3-14 10:15
这种语法很常用的, 没有正常不正常这么一说

嗯, 学习了, 谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 01:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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