c++ - malloc在leetcode在线编译中出现内存对齐错误?vs15中调试正常,调试后替换malloc为new则恢复正常?

查看:413
本文介绍了c++ - malloc在leetcode在线编译中出现内存对齐错误?vs15中调试正常,调试后替换malloc为new则恢复正常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

reference binding to misaligned address 0x00000001ddb1 for type 'const int',

https://leetcode.com/problems...
题的链接

以下是代码

  ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        int i = 1, v1 = 0, v2 = 0;
        ListNode begin(0);
        begin.next = NULL;
        ListNode *Tag = &begin;
        bool rouding = false;
        while (true)
        {
            if (l1 == NULL&&l2==NULL&&rouding!=true)
            {
                break;
            }
            int value = (l1 == NULL ? 0 : l1->val) + (l2 == NULL ? 0 : l2->val);
            if (rouding)
            {
                value += 1;
                rouding = false;
            }
            if (value >= 10)
            {
                rouding = true;
                value = value % 10;
            }
            //new部分
            ListNode *v;
            v = new ListNode(value);
       
            //malloc部分  (报错)
            ListNode *v = NULL;
            v = (ListNode *)malloc(sizeof(v));
            v->val = value;
            v->next = NULL; //此操作也是在线编译报错错误如下
            // store to address 0x000000a7de78 with insufficient space for an object of type 'struct ListNode *'
         
            
            Tag->next = v;
            Tag = Tag->next;
            l1 = l1==NULL?NULL:l1->next;
            l2 = l2==NULL?NULL:l2->next;
        }
        return begin.next;
    }
   

解决方案

用 sizeof(*v)替换 sizeof(v).
v是指针,不是对象,sizeof(v)返回的是当前平台下一个指针的大小(32位是4,64位系统是8),
而 ListNode 的大小包括一个指针和一个int,一定比sizeof(v)返回的值大。
因此很可能在运行时出现内存访问错误。

这篇关于c++ - malloc在leetcode在线编译中出现内存对齐错误?vs15中调试正常,调试后替换malloc为new则恢复正常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆