TIwilliam hill官网
直播中

杨雪

7年用户 1103经验值
私信 关注
[问答]

C6678基于sys/Bios的工程malloc动态分配二维数组问题,求高手指点

C6678基于sys/Bios的工程malloc动态分配二维数组问题,求高手指点
如图所示动态分配二维数组
出现的问题是obs_nav_common*7的obs二维数组与obs_nav_common*25的nav二维数组元素中出现地址复用,导致obs中的数据被改写或者覆盖。同样obs_nav_common*25的nav二维数组的元素与3*sv_data_count的sv_position_test二维数组出现地址冲突,导致nav中的元素被改写或者覆盖。而4*sv_data_count的sv_llh_position二维数组与3*sv_data_count的sv_position_test二维数组没有出现地址冲突。急求高手指点,在下谢谢!

回帖(4)

李玉珍

2018-6-21 18:07:48
我觉得是你前面两条malloc语句的语法存在问题。 我理解你是想分配一个double类型的二维数组,但是sizeof里面却用了指针类型,这样一个sizeof(double *)只有4个字节,而不是你想要的8字节,所以分配出来的内存长度小了。
举报

杨雪

2018-6-21 18:23:31
引用: cmh9 发表于 2018-6-21 18:07
我觉得是你前面两条malloc语句的语法存在问题。 我理解你是想分配一个double类型的二维数组,但是sizeof里面却用了指针类型,这样一个sizeof(double *)只有4个字节,而不是你想要的8字节,所以分配出来的内存长度小了。

Adam Yao,谢谢你,问题如你所说,已经解决好了!
举报

杨雪

2018-6-21 18:35:59
引用: cmh9 发表于 2018-6-21 18:07
我觉得是你前面两条malloc语句的语法存在问题。 我理解你是想分配一个double类型的二维数组,但是sizeof里面却用了指针类型,这样一个sizeof(double *)只有4个字节,而不是你想要的8字节,所以分配出来的内存长度小了。

Adam Yao ,你好,我用了很多malloc动态分配数组,在后面要将malloc分配空间给free掉,在free这些空间之中出现了
ti.sy***ios.heaps.HeapMem: line 345: assertion failure: A_invalidFree: Invalid free
xdc.runtime.Error.raise: terminating execution
我使用的free方式是这样的:
if(p)
[
free(p);
p = NULL;
]
你能给出一点建议么?谢谢咯
举报

李玉珍

2018-6-21 18:50:49
引用: ldd1211_ 发表于 2018-6-21 18:35
Adam Yao ,你好,我用了很多malloc动态分配数组,在后面要将malloc分配空间给free掉,在free这些空间之中出现了
ti.sy***ios.heaps.HeapMem: line 345: assertion failure: A_invalidFree: Invalid free
xdc.runtime.Error.raise: terminating execution

free失败的原因一般都是输入的地址不正确,建议你字节检查一下释放的地址。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分