请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

一个小问题求解

原版

static void ClearAll(CalcContext *calcContext){
    ClearBuffer(calcContext);
    calcContext->result = 0;
    memset(&calcContext->previous_operation,0,sizeof(Operation));
    memset(&calcContext->current_operation,0,sizeof(Operation));
}

这个版本运行的时候就会出错:
malloc.c:2617: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)’ failed.
修改后

static void ClearAll(CalcContext *calcContext){
    ClearBuffer(calcContext);
    calcContext->result = 0;
    memset(&calcContext->previous_operation,0,sizeof(Operation)/sizeof(int ));
    memset(&calcContext->current_operation,0,sizeof(Operation)/sizeof(int));
}

这个样子就不会了
环境是:ubuntu 64位 22版本 虚拟机环境
编译器是 gcc
内存:4g

尝试用了valgrind 这个工具,有点看不明白,但是原版的版本会显示 memset 的那段代码 Invalid write of size 8,新版就没有。。。

正在回答 回答被采纳积分+3

3回答

bennyhuo 2024-07-17 22:22:43

https://img1.sycdn.imooc.com/szimg/6697d3a5098dd7c614011568.jpg


我试了一下,一样的环境没有问题哈。。。

0 回复 有任何疑惑可以回复我~
bennyhuo 2024-07-17 07:13:05
看这个错误是出现在内存分配那里,应该可能是传入的指针有问题。

同学可以先尝试一下直接运行我的完整工程,看看是不是会有同样的错误。memset的用法第三个参数是写入的字节数,除以int的大小没有什么道理。
0 回复 有任何疑惑可以回复我~
  • 提问者 慕容2423615 #1
    找到问题了,malloc 的时候 sizeiof 的类型写错了。。。。
    回复 有任何疑惑可以回复我~ 2024-07-17 22:16:09
  • bennyhuo 回复 提问者 慕容2423615 #2
    好的。。。。
    回复 有任何疑惑可以回复我~ 2024-07-17 22:22:58
  • 提问者 慕容2423615 回复 bennyhuo #3
    回复 bennyhuo:感谢老师
    回复 有任何疑惑可以回复我~ 2024-07-17 22:46:43
bennyhuo 2024-07-17 07:08:43
同学贴一下gcc的版本吧
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信