在以下程序中:
int main()
{
struct Node node;
struct Node* p = (Struct Node*) malloc(sizeof(struct Node));
*p =node;
printf("%d\n", *p->seq);
}
Run Code Online (Sandbox Code Playgroud)
通常我做了 memcpy(p, node, sizeof(node))
现在我想上面的代码,并能正常工作,恐怕有任何后果或错误的东西,如果我做任务而不是memcpy之后malloc.有没有或任务是非常正确的?谢谢!
耶稣拉莫斯是正确的:
1)将*p =node;"node"中的所有内容复制到"*p"
2)你并不需要外来"的memcpy()"
3)在进行复制之前,必须分配"*p"(带"malloc()").
这是一个独立的测试:
// C source
#include <stdio.h>
#include <malloc.h>
struct Node {
int a;
int b;
struct Node *next;
};
int
main() {
struct Node node;
struct Node *p = malloc(sizeof(struct Node));
*p = node;
return 0;
}
# Resulting assembler
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl $12, (%esp)
call malloc
movl %eax, -8(%ebp)
movl -8(%ebp), %edx
movl -20(%ebp), %eax
movl %eax, (%edx)
movl -16(%ebp), %eax
movl %eax, 4(%edx)
movl -12(%ebp), %eax
movl %eax, 8(%edx)
movl $0, %eax
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
Run Code Online (Sandbox Code Playgroud)