问题描述
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; }
问题解答
回答1:用 sizeof(*v)替换 sizeof(v).v是指针,不是对象,sizeof(v)返回的是当前平台下一个指针的大小(32位是4,64位系统是8),而 ListNode 的大小包括一个指针和一个int,一定比sizeof(v)返回的值大。因此很可能在运行时出现内存访问错误。