问题描述
- 关于内存分配的问题
- 关于内存分配,结构体定义式多定义了一个指针的情况
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));
解决方案二:
#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已经有 内存空间了
- Q=(ANode)malloc(sizeof(ANode)) 中sizeof(ANode)只是指针的大小
- 一般这么写吧。Q=(ANode)malloc(sizeof(Node))
解决方案五:
1.Node P 的时候p已经有 内存空间了
- Q=(ANode)malloc(sizeof(ANode)) 中sizeof(ANode)只是指针的大小
- 一般这么用。Q=(ANode)malloc(sizeof(Node))
解决方案六:
P=(Node *)malloc(sizeof(Node));这种写法是错误的吧,你给的P是一结构体对象,malloc返回的是一个地址,把地址赋给结构体对象是不对的。
解决方案七:
Node P ;
P=(Node *)malloc(sizeof(Node));
这种做法是有问题的,你将指针赋值给了一个实例
应该是Node *P;
解决方案八:
sizeof会不同,第一个是结构体大小,第二个是指针大小4
时间: 2025-01-08 09:53:05