关于内存分配的问题

关于内存分配,结构体定义式多定义了一个指针的情况
typedef struct node{
int a;
int b;
}Node, *ANode;
那么为变量
Node P
和 为变量 ANode Q
创建空间
P=(Node *)malloc(sizeof(Node));
和 Q=(ANode)malloc(sizeof(ANode));
区别在哪里

Node P ---这个定义 的节点对象实例
和 为变量 ANode Q ---这个定义了一个指向对象实例的指针
创建空间
P=(Node *)malloc(sizeof(Node)); 所以不能讲指针赋值给一个对象
和 Q=(ANode)malloc(sizeof(ANode)); 定义有错,将4字节的内存强制转换为node指针,极其容易内存越界啊。

正确用法是ANode Q=(ANode)malloc(sizeof(Node));

sizeof会不同,第一个是结构体大小,第二个是指针大小4

 #include<iostream>
using namespace std;
typedef struct node{ 
int a; 
int b;
}Node, *ANode;
int main()
{
    cout << sizeof(Node) << endl;
    cout << sizeof(ANode) << endl;
}

输出
8
4

第一个sizeof得到的是结构体的长度,8个字节,第二个,因为是指针,就是4个字节

1.Node P 的时候p已经有 内存空间了

  1. Q=(ANode)malloc(sizeof(ANode)) 中sizeof(ANode)只是指针的大小
  2. 一般这么用。Q=(ANode)malloc(sizeof(Node))

P=(Node *)malloc(sizeof(Node));这种写法是错误的吧,你给的P是一结构体对象,malloc返回的是一个地址,把地址赋给结构体对象是不对的。

Node P ;
P=(Node *)malloc(sizeof(Node));
这种做法是有问题的,你将指针赋值给了一个实例
应该是Node *P;