不赋值是否就不分配内存

问题描述

/*2008年5月17日10:39:02*请问假设A是个类名*则Aaa;是不是只是声明了一个变量名aa,但是并没有给aa分配内存啊?**/usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace__17_3{classA{publicvoidf(){Console.WriteLine("我猜,我猜猜猜!");}publicvoidg(){f();}}classProgram{staticvoidMain(string[]args){Aaa=newA();//31行为什么改为32行的代码就会出错!请指教//Aaa;//32行aa.g();}}}

解决方案

解决方案二:
没有实例化.还没有分配内存空间
解决方案三:
假设A是个类名则Aaa;是不是只是声明了一个变量名aa,但是并没有给aa分配内存啊?--yes31行为什么改为32行的代码就会出错--没有给aa分配内存
解决方案四:
没有错啊。。。
解决方案五:
哦,没看你的注释,没有实例化,就没有引用地址,就是null,null当然不能调用g()了
解决方案六:
Aaa=newA();//31行为什么改为32行的代码就会出错!请指教//Aaa;//32行没有分配内存空间..
解决方案七:
当定义一个变量后.不关你赋不赋值.都要根据类型 分配内存空间.
解决方案八:
new:分配内存
解决方案九:
实例化后就是分配了内存~
解决方案十:
实例化了之后分配内存!
解决方案十一:
如果A是一个struct,就会在栈上分配空间如果A是一个class,只会在栈上分配一个引用(4个字节),实例化的时候才会在托管堆上分配实际的内存空间,并将该引用指向分配的空间
解决方案十二:
分配空间跟赋值没关系,new就会分配空间,及时你没有把这个引用赋值给某个变量
解决方案十三:
引用7楼wfyfngu的回复:

new:分配内存

解决方案十四:
实例化后才能分配内存
解决方案十五:
应该是new了以后就分配内存了吧
解决方案:
值类型会分配,引用类型必须new才分配。类为引用类型,结构为值类型。
解决方案:

解决方案:
Aaa是在栈上申请了一个A类的指针要用new来在托管堆上申请空间来付给aa它就相当于C++里面的指针没有赋值的指针是不允许用的

时间: 2024-08-19 15:26:32

不赋值是否就不分配内存的相关文章

深入理解函数中分配内存的问题

先看这样的代码  1void MyNew(int *p) 2{ 3    p = new int; 4} 5 6int main() 7{ 8    int *p = NULL; 9    MyNew(p);10} 开始写了一篇函数中分配内存的问题,通过说明他们产生了拷贝,而导致p不能成功分配.但并未提出事实根据,下面我们来仔细看看具体原因. 我们需要弄清两点:1.main函数中的p与MyNew函数中的p是不是一样:2.如果不一样,是怎么导致了不一样的. 第一点很好看,我们可以在编译器(VC环境

JAVA中new String[0] 和 new String[1]是怎么分配内存的?

问题描述 JAVA中String[]s1=newString[0]和String[]s2=newString[1]是怎么分配内存的?我的理解:1.栈空间分配s1,s2:2.s1指向堆空间某个地址,内容为null:s2指向堆空间某个地址s2[0],然后s2[0]指向某个堆空间,内容为null;不知道这个理解对否,望指点. 解决方案 解决方案二:很简单,您可以直接打印s1和s2,如果按你的理解应该会输出null和一串地址,但其实应该2个都是有地址的就都不是空的解决方案三:指向堆没问题.不过不是nul

c++-初学者求教,关于数组分配内存的问题

问题描述 初学者求教,关于数组分配内存的问题 在c++中对于string这样的类类型,因为字符长度可变,在数组中怎样分配内存空间??? 解决方案 存的是string的指针,他只想实际字符串地址 解决方案二: 字符串分配内存,一般可以用动态分配.但是还要看你的具体要求 解决方案三: string是长度固定的,怎么叫可变? 字符串的相加.赋值等等都会产生一个新的字符串对象. 解决方案四: 动态分配,当空间不够了,就分配一块更大的空间,拷贝内容,删除原来的空间 解决方案五: string类型是一个对字

字符串-C语言关于char分配内存的问题

问题描述 C语言关于char分配内存的问题 环境 :Linux Ubuntu 14.04 #include<stdio.h> #include<string.h> #include<malloc.h> int main() { char *str1; char *str2="hello"; char *str3="world"; str1=malloc(3*sizeof(char)); strcpy(str1,str3);// c

vc++-GlobalAlloc分配内存区的问题

问题描述 GlobalAlloc分配内存区的问题 long *p ;//分配缓存区CFile FileIris(""c:Iris.txt""CFile::modeRead);DWORD Length = FileIris.GetLength();//指向缓存区的指针p=::GlobalAlloc(0Length);最后一句程序报错: error C2440: '=' : cannot convert from 'void *' to 'long *'求指点,找了半天

函数中分配内存的问题

只是为了能够让自己讲清一些事! 大家都知道,如果想要在在C++的函数中分配内存,那么就只得使用指针的引用传递,或是二级指针 如: void MyNew(int** p)   {       *p = new int;   }      void MyNew(int*& p)   {       p = new int;   }   而通常我们在开始的学习中,都会写成 void MyNew(int* p) {    p = new int; } 为什么这样分配不会成功呢? 原理很简单,就是形参传递

在使用malloc函数给指针分配内存之后为什么使用编译器打印不出地址。代码如下,编译器为vs2015

问题描述 在使用malloc函数给指针分配内存之后为什么使用编译器打印不出地址.代码如下,编译器为vs2015 #include #include void main() { char *s[10]; int i; for (i = 0;i < 10;i++) { if ((s[i] = (char *)malloc(128)) == NULL) printf("nerrorn"); exit(0); } for (i = 0;i < 10;i++) { printf(&q

对象内存分配-Java对象中的对象如何分配内存?

问题描述 Java对象中的对象如何分配内存? 在Java中,比如A a=new A ();是在堆内存中创建了一个对象,然后把这个对象的引用传递给栈内存中的对象变量a.那如果a对象拥有一个字符串对象,那a对象中保存的是这个字符串对象的引用吗? 解决方案 a是A类型的.不能拥有一个字符串对象. 如果A中有一个字符串字段,那一样的,堆上的a中存储着指向这个字符串的引用.字符串本身则放在常量池或者也在堆上. 解决方案二: 不知道是不是这个意思:将字符串对象符值给a,这是不可以的,除非是相同类型,如果A是

java-JAVA中数组定义new分配内存空间的问题

问题描述 JAVA中数组定义new分配内存空间的问题 JAVA中在定义一个数组的时候,根据书上内容形式,举一个例子 int[] arr=new int[]{3,4,5,}; 但是在实际中,我见到过或者使用更多的是 int[] arr={3,4,5}; 这个时候要不要new去分配内存又有什么区别呢? 在JAVA中 是不是没有new 分配的时候 数组arr在内存栈中 new分配内存空间时 数组arr就到了堆内存中呢 解决方案 现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就