如果我做任务但是在malloc之后没有memcpy会有什么后果吗?

mis*_*yes 1 c malloc memcpy

在以下程序中:

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.有没有或任务是非常正确的?谢谢!

pau*_*sm4 6

耶稣拉莫斯是正确的:

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)