是什么导致此 "store to address with insufficient space" 错误?
What is causing this "store to address with insufficient space" error?
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* test = malloc(sizeof(struct ListNode*));
test->val = 6;
struct ListNode* lex = malloc(sizeof(struct ListNode*));
test->next = lex;
return test;
此时我应该收到一个填充的结构。相反,我得到这个:
Line 14: Char 18: runtime
error: store to address
0x602000000118 with
insufficient space for an
object of type 'struct ListNode
*' (solution.c)
0x602000000118: note: pointer
points here
be be be be 00 00 00 00 00 00
00 00 02 00 00 00 ff ff ff 02
08 00 00 20 01 00 80 70 be be
be be
这是怎么回事?
您只是为 ListNode 指针而不是实际的 ListNode 分配 space。
尝试:struct ListNode* test = malloc(sizeof(struct ListNode));
我们来看看这行代码:
struct ListNode* test = malloc(sizeof(struct ListNode*));
指针 test
想要指向一个足够大的内存块来容纳一个实际的、诚实的 struct ListNode
对象。该对象中有一个整数和一个指针。
但是,您对 malloc
的调用显示 "please give me enough space to store a pointer to a struct ListNode
object." 内存不足以容纳 struct ListNode
,因此出现错误。
解决此问题的一种方法是在您的 sizeof
调用中从 struct ListNode
中删除星标:
struct ListNode* test = malloc(sizeof(struct ListNode));
另一个相当可爱的选择是使用这种方法:
struct ListNode* test = malloc(sizeof *test);
这表示 "the amount of space I need is the amount of space that an object pointed at by test
would require." 恰好是 sizeof (struct ListNode)
,并且无需使用第二种方法输入类型。
请注意,您遇到的错误是 运行time 错误,而不是 compiler 错误。您拥有的代码是合法的 C 代码,但是当您 运行 程序时将无法工作。
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* test = malloc(sizeof(struct ListNode*));
test->val = 6;
struct ListNode* lex = malloc(sizeof(struct ListNode*));
test->next = lex;
return test;
此时我应该收到一个填充的结构。相反,我得到这个:
Line 14: Char 18: runtime
error: store to address
0x602000000118 with
insufficient space for an
object of type 'struct ListNode
*' (solution.c)
0x602000000118: note: pointer
points here
be be be be 00 00 00 00 00 00
00 00 02 00 00 00 ff ff ff 02
08 00 00 20 01 00 80 70 be be
be be
这是怎么回事?
您只是为 ListNode 指针而不是实际的 ListNode 分配 space。
尝试:struct ListNode* test = malloc(sizeof(struct ListNode));
我们来看看这行代码:
struct ListNode* test = malloc(sizeof(struct ListNode*));
指针 test
想要指向一个足够大的内存块来容纳一个实际的、诚实的 struct ListNode
对象。该对象中有一个整数和一个指针。
但是,您对 malloc
的调用显示 "please give me enough space to store a pointer to a struct ListNode
object." 内存不足以容纳 struct ListNode
,因此出现错误。
解决此问题的一种方法是在您的 sizeof
调用中从 struct ListNode
中删除星标:
struct ListNode* test = malloc(sizeof(struct ListNode));
另一个相当可爱的选择是使用这种方法:
struct ListNode* test = malloc(sizeof *test);
这表示 "the amount of space I need is the amount of space that an object pointed at by test
would require." 恰好是 sizeof (struct ListNode)
,并且无需使用第二种方法输入类型。
请注意,您遇到的错误是 运行time 错误,而不是 compiler 错误。您拥有的代码是合法的 C 代码,但是当您 运行 程序时将无法工作。