指针-关于内存分配的问题

问题描述

关于内存分配的问题
关于内存分配,结构体定义式多定义了一个指针的情况
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已经有 内存空间了

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

解决方案五:
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;

解决方案八:
sizeof会不同,第一个是结构体大小,第二个是指针大小4

时间: 2025-01-08 09:53:05

指针-关于内存分配的问题的相关文章

指针-c++对象内存分配的问题,如何确定在堆上还是在栈上?

问题描述 c++对象内存分配的问题,如何确定在堆上还是在栈上? c++中对象内存放堆上还是在栈上是不是根据对象实例化的方法,如: A a; //在栈中分配内存 A * a = new A(); //动态内存分配,在堆上 要是这样,如果我尽量不用指针的话(这样程序风格似乎更加清晰一些),那是不是对象都分配到栈上了?这有什么弊端吗?栈的空间是不是很有限?是不是为了栈空间的问题我们必须尽量多用new分配内存呢?类成员是不是也要多用指针呢? 解决方案 经过昨晚大家的热心帮助,对该问题的疑问已经烟消云散,

【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. 数组与指针 #include<stdio.h> #include<stdlib.h> void main1() { int a[10]

指针-一个动态内存分配的问题,函数执行后p指向哪里?

问题描述 一个动态内存分配的问题,函数执行后p指向哪里? 一下是我的代码: #include<stdio.h> #include<stdlib.h> #include<string.h> char *strcnp(char *sd,char *ds) { char *q=sd; while((*ds++=*sd++)!='') NULL; return q; } int main() { char *a[4]={"abc","def&quo

类中的内存分配和指针类型强制转换问题

问题描述 类中的内存分配和指针类型强制转换问题 问题描述: template //element type class list { private: EleT data;//数据本身,即是需要的信息 list* prio;//the pointer of prior element list* next;//the pointer of next element list* last;//the last pointer of list int len;//the length of list

关于Java 数组内存分配一点认识

 可能Java 数组大家都很熟悉,最近我遇到了一个关于Java 数组内存分配的问题.         呵呵.突然就发现许多书上"基本数据类型存储在栈内存当中,对象则保存在堆内存"这句话完全是错误的.下面是个简单的例子代码: public class Test { public static void main(String[] argv) { // 静态初始化数组 String[] names = { "Michael", "Orson", &q

VC6下使用STL注意:不要让内存分配失败导致您的旧版STL 应用程序崩溃

大多数 C++ 开发人员在他们的代码中都广泛使用了标准模块库 (STL).如果您是其中的一员,并且正在直接使用即装即用的 STL 和 Visual C++ 6.0,则在内存不足的条件下,您的应用程序就处于崩溃的高度危险的状况下.产生此问题的原因是,检查运算符 new 是否失败是一种非常少见的做法.更糟糕的是,当 new 确实失败时,响应不是标准的.有些语言编译器返回 NULL,而其他语言则引发异常. 另外,如果您正在 MFC 项目中使用 STL,要注意 MFC 有其自己的规则集.本文将讨论这些问

new-正在学c++, class内存分配的问题

问题描述 正在学c++, class内存分配的问题 重载 Matrix& Matrix::operator-(const Matrix &m) { if (m.row_n != row_n||m.column_n != column_n) { std::cout << "Size not matching, can't add!" << std::endl; std::cout << "the left is returne

C++二维指针动态分配内存连续问题

当我们定义一个二维指针时,如果需要存储相应的数据,就需要我们动态的分配内存,这时,有一点是需 要注意的,分配内存的方法不同,内存的连续性也是不相同的,首先,博主先贴出测试代码: #include <cstdlib> #include <iostream> using namespace std; #define nWidth 3 #define nHeight 4 //内存是否连续分配问题 int main(int argc, char *argv[]) { int **p = N

简明分析C/C++内存分配的解决方案

C/C++的内存分配(通过malloc或new)可能需要花费很多时. 更糟糕的是,随 着时间的流逝,内存(memory)将形成碎片,所以一个应用程序的运行会越来越慢.当它 运行了很长时间和/或执行了很多的内存分配(释放)操作的时候.特别是,你经常申请 很小的一块内存,堆(heap)会变成碎片的. 解决方案:你自己的内存池一个( 可能的)解决方法是内存池(Memory Pool). 在启动的时候,一个"内存 池"(Memory Pool)分配一块很大的内存,并将会将这个大块(block)