请教一下,c#对象引用释放问题 2C

请问一下,在c#里,如果方法中的参数为对象,然后引用了外部的对象,再被方法内的对象集合添加了,这个集合是这个方法所在的类的静态集合,那这个对象还是存在在堆中,只有这个集合移除了这个对象,然后这个对象才在程序运行时真正释放掉么?这个又是静态集合,静态集合只能在程序结束才能被销毁,那这个对象能完全释放要么从这个静态集合中移除要么整个程序结束,这样理解对不?

1个回答

所有的对象(class)都肯定是在堆上的。只有局部变量的值类型(简单类型,比如int,或者structs,enum等)在堆栈上。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#中资源释放的问题请教!
private DataView dv=new DataView();rn与rnprivate DataView dv=nullrn在对创建的DV进行赋值,最后在调用Dispose()释放资源的时候是否会释放new DataView()的资源。
请教一下c#的问题
在页面上我又加了一个eWebEditor 控件,在后台能获取它的值,但是我不能给它赋值rnrn页面代码:rnrn后台获取值的代码:string content = Request.Form["EWebEditorExt"].ToString();
请教一下delete释放内存
RSBlocks=new int*[numRSBlocks];//numRSBlocks=2rnfor(i=0;i
麻烦,请教一下动态内存的释放的问题
对于嵌入式的软件系统。rn如果在开机启动后给一个全局的指针变量分配了一块动态内存,程序运行的途中不会再重新分配,但是需要使用该全局指针变量,那么当关机后需要释放分配的内存的吗?rn谢谢高手回答。
请教一下:如何释放进程???
VS 2010 开发WinForm(c#)rnrn我写了一个小软件(WinSteel),打开软件后,会出现3个进程,如下图(WinSteel.exe):rn[img=https://img-bbs.csdn.net/upload/201506/02/1433228506_478685.jpg][/img]rnrn当我关闭软件后,进程中的WinSteel.exe还在,不会消失!rnrn请问:是不是需要些代码来释放这些进程??代码怎么写??rnrn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/22.gif][/img]
c#对象引用的问题
1.DataSet ds = new DataSet();rnds = ExecuteDs();//一个返回dataset类型的方法rn2.与rnDataSet ds = ExecuteDs();rn有什么区别?rn1跟2是同一个对象吗?早上在一个群里问过了,但还是迷迷糊糊,希望高手帮我解惑!
对象引用问题请教!
function comefrom(loca,locacity)this.loca=loca;this.locacity=locacity;rnwhere[0]=new comefrom('A','B');rn然后就可以像下面这样引用了吗?rnwhere.loca=...rnwhere.locacity=...
---请教字符串与对象引用的问题---
rn假如已定义以下控件:rnrnrn字符串定义如下:rnstring ConNmae="La";rn方法(ConName).Text="对象引用"; //请问此处应该使用什么方法获取对象的引用.rnrn因为有时页面上有很多控件,同一类型的控件使用同一CSS样式,所以我想用程序遍历页面上所有的控件,跟据控件类型使用已定义好的CSS样式...rn
请教一下C#进程的问题
本人做了个窗体然后让他form隐藏,taskbar也隐藏了,那么我如何他能够过句柄进程来重新让他的form显示呢...
请教一下C#文件操作问题。
文件大小是30M.从17M左右开始读取3M字节,n将file_len 改成常量比如300万。就没有问题,使用成变量就是会报告:n Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.n 错误。n nn file_postion和file_len 是函数参数(int)n n byte [] buffer = new byte[file_len];n FileStream fs = new FileStream(“txt”, FileMode.Open, FileAccess.ReadWrite);n BinaryReader Reader = new BinaryReader(fs);n Reader.Read(buffer, file_postion, filelen);n Reader.Close();n fs.Close();n n n
请教一下C#打印的问题
想用编程实现打印指定文件夹下的演示文稿或其它文件,并且以每张9页、加边框、灰度模式打印,得到打印机的状态(如脱机、文件打印完成、正在打印文件、卡纸、缺纸等)rn 我对这方面还不是很了解,希望大侠能指点一下,或者提供一点相关的资料。rn 谢谢!
请教Thread的释放问题
最近常常遇到线程,线程的释放的问题让我一直拿捏不准。今天写了一个简单的线程,本来还从中学了点东西,但是最后遭遇到一个大问题,就是主线程要Destroy的时候,尝试释放线程就失效了,用FastMM以检测,线程对象、线程中手动申请的内存完全释放不了。但是,可以先调用Termiante,然后调用Close关闭掉主窗口,关掉程序就没有问题,于是,我目前只好做成尝试关掉主窗口前强制手动Termiante。rn线程类代码rn[code=Delphi(Pascal)]rnunit UThread;rnrninterfacernusesrn Classes, Dialogs, Windows, SysUtils;rnrntypern TMyThread = class(TThread)rn privatern FMainHandle: THandle;rn FNum: Integer;rn FAnswer: Cardinal;rn FTimeElapse: Cardinal;rn FShowLst: TList;rn procedure DoOnTerminate(Sender: TObject);rn procedure DisplayAnswer;rn protectedrn procedure Execute; override;rn publicrn constructor create(Suspended: Boolean; Vol: Cardinal);rn destructor destroy; override;rn property Terminated;rn property MainHandle: THandle read FMainHandle write FMainHandle;rn end;rnrnimplementationrnusesrn UMain;rnrn TMyThread rnrnconstructor TMyThread.create(Suspended: Boolean; Vol: Cardinal);rnbeginrn FNum := Vol;rn FreeOnTerminate := True;rn OnTerminate := DoOnTerminate;rn inherited Create(Suspended);rn FShowLst := TList.Create;rnend;rnrndestructor TMyThread.destroy;rnbeginrn FreeAndNil(FShowLst);rn inherited;rnend;rnrnprocedure TMyThread.DisplayAnswer;rnbeginrn Form1.edt1.Text := IntToStr(FAnswer);rn if Form1.pb1.Position < Form1.pb1.Max thenrn Form1.pb1.StepIt; rnend;rnrnprocedure TMyThread.DoOnTerminate(Sender: TObject);rnbeginrn beginrn MessageBox(Form1.Handle, PChar(Format('Total Time Elapse:%d', [FTimeElapse])),rn 'Info', 0);rn Form1.pb1.Position := 1;rn Form1.btn1.Enabled := True;rn end;rnend;rnrnprocedure TMyThread.Execute;rnvarrn i: Integer;rn Start_TickCount, k: Cardinal;rnbeginrn Start_TickCount := GetTickCount;rn for i := 0 to FNum - 1 dorn beginrn k := Round(Abs(Sin(Sqrt(i))));rn if Terminated thenrn Break;rn FAnswer := FAnswer + k;rn Synchronize(DisplayAnswer);rn end;rn FTimeElapse := GetTickCount - Start_TickCount;rn inherited;rnend;rnrnend.rn[/code]rn主线程代码rn[code=Delphi(Pascal)]rnunit UMain;rnrninterfacernrnusesrn Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,rn Dialogs, StdCtrls, UThread, ComCtrls, Buttons;rnrntypern TForm1 = class(TForm)rn btnCreateSuspend: TButton;rn edtDisplay: TEdit;rn pb1: TProgressBar;rn btnSuspend: TButton;rn btnResume: TButton;rn btnTerminate: TButton;rn btnCheckThreadStatus: TButton;rn btn6: TSpeedButton;rn procedure btnCreateSuspendClick(Sender: TObject);rn procedure FormCreate(Sender: TObject);rn procedure btnSuspendClick(Sender: TObject);rn procedure btnTerminateClick(Sender: TObject);rn procedure btnResumeClick(Sender: TObject);rn procedure btnCheckThreadStatusClick(Sender: TObject);rn procedure FormDestroy(Sender: TObject);rn procedure btn7Click(Sender: TObject);rn procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);rn privatern Private declarations rn procedure TerminateThread;rn publicrn Public declarations rn FThread: TMyThread;rn end;rnrnvarrn Form1: TForm1;rnrnimplementationrnrn$R *.dfmrnrnprocedure TForm1.btnCreateSuspendClick(Sender: TObject);rnvarrn Vol: Integer;rnbeginrn Vol := 200000;rn FThread := TMyThread.create(True, Vol);rn pb1.Max := Vol;rn TButton(Sender).Enabled := False;rnend;rnrnprocedure TForm1.FormCreate(Sender: TObject);rnbeginrn pb1.Step := 1;rnend;rnrnprocedure TForm1.btnSuspendClick(Sender: TObject);rnbeginrn if not FThread.Terminated thenrn beginrn FThread.Suspended := not FThread.Suspended;rn end;rnend;rnrnprocedure TForm1.btnTerminateClick(Sender: TObject);rnbeginrn TerminateThread;rnend;rnrnprocedure TForm1.btnResumeClick(Sender: TObject);rnbeginrn if Assigned(FThread) and (not FThread.Terminated) and (FThread.Suspended) thenrn FThread.Resume;rnend;rnrnprocedure TForm1.btnCheckThreadStatusClick(Sender: TObject);rnvarrn sStatus: string;rnbeginrn if not Assigned(FThread) thenrn beginrn sStatus := 'Thread is nil!';rn btn6.Caption := 'Thread Current Status: ' + sStatus;rn Exit;rn end;rnrn if FThread.Suspended thenrn beginrn sStatus := 'Is Suspended: Yes ;';rn endrn elsern sStatus := 'Is Suspended: No ;';rnrn if FThread.Terminated thenrn beginrn sStatus := sStatus + ' Is Terminated: Yes';rn endrn elsern sStatus := sStatus + ' Is Terminated: No';rn btn6.Caption := 'Thread Current Status: ' + sStatus;rnend;rnrnprocedure TForm1.FormDestroy(Sender: TObject);rnbeginrn tryrn TerminateThread;rn exceptrn end;rnend;rnrnprocedure TForm1.TerminateThread;rnbeginrn if Assigned(FThread) and (not FThread.Terminated) thenrn beginrn if FThread.Suspended thenrn beginrn FThread.Resume;rn end;rn FThread.Terminate;rn FThread := nil;rn end;rnend;rnrn没办法,强制Terminate线程才允许关闭窗口,有什么办法可以解决这个问题?rnprocedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);rnbeginrn CanClose := (FThread = nil) or (FThread.Terminated = True);rn if not CanClose thenrn MessageBox(Handle, 'Termiante the thread first!', ' Terminate thread', 0);rnend;rnrnend.rn[/code]rn代码贴得比较多,但是其实很简单,我现在就是拿捏不准,在主线程Destroy的时候调用TerminateThread完全没有用,根本没有释放线程相关的资源,但是点击btnTerminate就可以正常的释放,调用的是相同的代码。最后,我发现,在主线程Destroy的时候,如果把线程类定义中的OnTerminate := DoOnTerminate;这一句屏蔽掉也正常,但是这屏蔽了正常的执行线程就有问题了,不能及时的刷新窗口,也许你会说在Execute中同步一个方法,但是我如果就想在OnTerminate中实现该怎样处理?或者说怎样通知线程在主线程要Destroy的时候就不要再刷新窗口了,我尝试在OnTerminate的赋值方法中调用类似rnif not (csDestroying in Form1.ComponentState) thenrn //刷新UIrn但是也没有收到相应的效果。rn这个到底该怎么办呢?rn
请教char*释放问题
[code=c]rnvoid test()rnrn char* p = new char[128];rn delete[] p;rnrn[/code]rn但是改成:rn[code=c]rnvoid test()rnrn char* p = "my test";rnrn[/code]rn这样要不要主动释放呢?有人说"my test"相当于一个const char,是申请在栈内存上的,rn会随着函数的结束而释放。rnrn下面有两个函数,先调用first(),然后调用second()rn[code=c]rnstd::vector vecChar;rnvoid CAccountServerDlg::first()rnrn char* szChar = "my test1";rn vecChar.push_back(szChar);rn char* szChar2 = "my test2";rn vecChar.push_back(szChar2);rnrnrnvoid CAccountServerDlg::second()rnrn int n = vecChar.size();rn for (int i = 0; i < n; ++i)rn rn char* sz = vecChar[i];rn rnrn[/code]rn运行通过,且sz能获取到szChar和szChar2的地址,从这边看,在first()占有的内存并没有随着rnfirst()的结束而释放。rnrn难道说在first()中定义const char* szChar才会被释放,而char*不会?rn那应该怎样释放?
请教窗口释放的问题!
程序如下rnunit MainUnit;rntypern TForm1 = class(TForm)rn publicrn subFrm :TForm2;rn end;rn然后rn subFrm :=TForm2.Create(Application);rn subFrm.show;rn如果在Form2里加入一个按钮rnimplementationrnuses MainUnit;rnrnprocedure TForm2.Button1Click(Sender: TObject);rnbeginrn MainUnit.Form1.subFrm.Free;rn a:=1;rnend;rn那么此程序的的执行顺序是怎么样的?rn如果在subFrm.Free执行了以后,a:=1;还会执行吗?rn应该内存是已经释放掉的了哦,会不会有问题呢?rnrnrn
C# 控件释放问题
我动态的向panel1 控件内添加了几个 PicturesBox 控件rn现在想将其全部释放、以下是我写的代码、但是实现不了rn运行后、没什么反应啊、为什么。。?rnforeach (PictureBox allPic in panel1.Controls)rnrn allPic.Dispose();rn
c# 中资源释放问题
在c#中的一个函数中创建一个局部变量,例如:rn private void button1_Click(object sender, EventArgs e)rn rn Form1 form = new Form1();rn form.ShowDialog();rn form.Close();rn rn当这个函数的执行完之后,form对象是否被释放了呢?rn如果不释放,那么我每调用一次这个函数,不是要增加一个这个变量的对象吗?rn请问这种问题怎么解决呢?
请教连接池的释放问题???
读取数据库jsp->bean->连接池->数据库 连接池是自己写的rnrnbean 返回resultset 到jsp,同时希望在beanrn里进行连接池的操作(如返回空闲连接等),但这样rn可能会造成resultset的返回出错(result set is closed ),rn有没有办法解决??rn(最好能在连接池里增加代码来解决)rnrn
请教DLL释放问题
开发软件时,需要客户端将采用核心与外围剥离的方式开发,核心层负责提供直接的用户界面,负责使用WinAPI打开网络套接字,并对外围的DLL进行各种调用。外围的DLL实现具体功能。rn我知道,典型的调用DLL中的某个过程,可以这样实现(Delphi语句):rnrnbeginrnFDLLHandle:=LoadLibrary('AddFunction.dll');//获得句柄rnif FDLLHandle>0 thenrn tryrn PAddFunction:=GetProcAddress(FDLLHandle, 'AddFunc'); rn //获得DLL中AddFunc过程的入口地址rn if PAddFunction<>nil thenrn // do somethingrn elsern showmessage('dll 没有找到。');rn finallyrn FreeLibrary(FDLLHandle);rn endrnelsern showmessage('dll 没有找到。');rnendrnrn现在核心程序需要多次使用同一DLL中的过程。而且又不能使用多线程编程。例如,按下某个按钮后执行DLL中rnrn的AddFunc过程。按多次该按钮就执行多次该DLL中的AddFunc过程。因此,上面的程序不需要这样写。只需要在rnrn主程序中获得DLL句柄,在按钮事件中调用同一个DLL过程:rnrn//主程序rnbeginrn FDLLHandle:=LoadLibrary('AddFunction.dll');rn //该变量设置为全局 传递给单击按钮事件的过程rn if FDLLHandle<=0 thenrn beginrn showmessage('dll 没有找到。');rn exit();rn end;//End for if FDLLHandle<=0rn //开始主程序消息循环rn //do somethingrnend. //end for mainrnrn按钮的单击事件映射到下面的过程rnprocedure TForm.Button_Click(Sender: TObject);rnbeginrn tryrn PAddFunction:=GetProcAddress(FDLLHandle, 'AddFunc');rn if PAddFunction<>nil thenrn // do somethingrn elsern showmessage('AddFunction.dll 没有找到。');rn finallyrn FreeLibrary(FDLLHandle);rn end//End for tryrnend;//end for Proc Button_Clickrnrn这样就不需要多次载入DLL。因为只需要载入一次,每次传递句柄即可。rn我也已经实现了这种方式的调用。问题是现在我的主程序在关闭的时候出现了问题:主程序关闭的时候,DLL中rnrn的过程可能还没有运行完。如果直接使用:rnif FDLLHandle>0 then FreeLibrary(FDLLHandle);rn那么正在运行的结果是进程死了。无论如何也无法关闭,除非直接杀死进程。请问有什么办法知道该DLL中的过rnrn程仍然在运行。从而阻止直接释放DLL?rn例如改写成为:rnif FDLLHandle>0 then rn if 该DLL所以过程都不在运行了 thenrn FreeLibrary(FDLLHandle);rn elsern beginrn showmessage('请先结束所以任务后再退出主程序');rn //不再结束主程序,返回主程序消息循环rn // Do somethingrn end;//end for else ofrnrn请教如何得知DLL是否可以释放了? rnrnrn
请教对象的释放问题??
Vector V=new Vector();rnrnfor(....)rn rn Vector V1=new Vector();rn V.add(V1);rn rnrn请问释放V后,V1会被释放吗??rn
请教内存回收释放的问题~
请问数组使用完后怎样进行内存释放rn例如:rndim a(2000000) as stringrnrn...使用完rnrn释放:Erase arnrn这样在管理器中可以看到运行好几次这个过程后内存基本一样,但如果不释放运行多几次可以看到内存在每次使用完中都会增加,我不知这样算不算真正的释放内存rnrn但如果是dim a as new list(List(Of String) 或Dim dict As New Dictionary(Of String, String)rn在这些类型中我不知怎样才能在用完后释放内存,我只是用dict.Clear()和 a.Clear()rn但这样好象不能真正进行释内存,在多调用几次过程就提示出错,出错原因是没有足够内存生成新的数组,请问怎样才能解决?
请教:释放内存 的问题
请教:释放内存 的问题 rn rn大家好,在我程序里需要开辟内存缓冲区,我开辟使用以后,在关闭设备,想释放掉这段内存缓冲区,用以下代码:rn if (pData!=NULL) //pData就是我开辟使用的内存缓冲区rn rn delete pData;rn rn pData=NULL;rn在没有加这段代码时候,程序很正常,但是在加上以后,编译通过,链接通过,一运行程序,就弹出一个对话框:rnrnDebug Assertion Failed !rnProgram:D:\test.exernFile:dbgheap.crnLine:1011rnrnExpression :_CrtIsValidHeapPointer (pUserData)rnrnFor information on how........rnrn终止 重试 忽略rnrnrn第一次遇到这样的问题,不知道是怎么回事情,请大家帮忙看看。谢谢rn
请教内存分配与释放问题
代码如下:rnchar * getMemory(void)rnrn char * str="hello world";rnrn return str;rnrnrnint main()rnrnrn char * str=NULL;rn str=getMemory();rn printf(str);rn delete str; //出错地方rn return 0;rnrn为什么在delete str;语句处总出错。而我把getMemory改成下面就不会出错。rnchar * getMemory(void)rnrn char str[]="hello world";rn int isize=strlen(str)+1;rn char * p=new char[isize];rn memcpy(p,str,isize);rn rn return p;rnrn
请教Form的释放问题
请问,OnClose和OnDestroy有何区别?rnrn对自动创建的Form及手工创建的Form又有何区别?rnrn是否需要在OnClose中action:=cafree,而在OnDestroy中form1:=nilrnrn谢谢~
C#匿名委托释放问题
[code=C#]rnprivate DelegateDemo _demoClass;rnvoid main()rnrn_demoClass= new DelegateDemo(); // 1rn_demoClass.Demo(delegate(string msg)rnrnConsole.WriteLine("顺利执行回调: " + msg); // 2rn);rnrnrnpublic delegate void DemoEventHander(string msg);rnrnclass DelegateDemornrnrnpublic void Demo(DemoEventHander end_call_back) // 3rnrnConsole.WriteLine("执行了构造");rnend_call_back("执行回调");rnrnrnrn[/code]rn我的问题是,这样的匿名函数需要资源的释放吗?rn1这个类我一直会保留,不会释放,但是2是不是应该进行释放呢?rn如果释放,如何做呢?rn我现在在垃圾回收这里遇到难题,好多地方呢,先怀疑匿名函数这吧?rn求高人指点...先行谢谢~
c# form 释放问题
在c#中,可以在某个函数内执行下列语句rnrnForm1 frm = new Form1();rnfrm.Show();rnrn窗体show出来了,但是frm的作用域也完了,垃圾回收会不会自动释放这个窗体?rn
C#窗体释放问题
情况:我使用单例模式,使同一时刻只能有一个DgvForm窗体实例运行rn以下是DgvForm中的关键代码: rn[code=C#]rnpublic partial class DgvForm : Formrn rn private static DgvForm instance=null;rnrn public static DgvForm Instancern rn get rn if (instance == null)rn instance = new DgvForm();rn return instance;rn rn rnrn[/code]rn调用时使用 rn[code=C#]rnprivate void btnDgv_Click(object sender, EventArgs e) DgvForm.Instance.Show(); DgvForm.Instance.BringToFront(); rn[/code]rn这样可以使同一时刻只有一个DgvForm实例在运行rn我试了几次,发现一个问题:rn点击btnDgv_Click一次,显示出DgvForm窗体,没有问题rn再次点击btnDgv_Click一次,显示出刚才的DgvForm窗体,没有问题rn把DgvForm事例关闭,再次点击btnDgv_Click,出错!rn以下是错误信息:rn--------------------------------------------------------------------------------------------------------------rn未处理 System.ObjectDisposedExceptionrn Message="无法访问已释放的对象。\r\n对象名:“DgvForm”。"rn--------------------------------------------------------------------------------------------------------------rn求大侠门指教.rnrn
c# webbrowser释放问题
webbrowser循环打开网页时占用cpu到98%以上就卡死了,什么释放cpu,谢谢各位大侠帮忙指点一下
请教各位老师:对象引用的问题
今天我遇到一个在网上看到的问题,可是我反复运行编译,就是不理解其中的道理,希望各位老师给予解答,谢谢rn题目是这样的:rnclass Arn rn int a = 1;rn int b;rn void f()rn rn System.out.println("abc");rn rnrn rnclass B extends Arnrn rn double a = 2.1;rn double b;rn void f()rn rn System.out.println("ABC");rn rnrnpublic class ExtendsTestrnrn public static void main(String[] args)rn rn A x1 = new A();rn B x2 = new B();rn System.out.println(x1.a);rn x1 = x2;rn System.out.println(x1.a);rn System.out.println(x2.a);rn x1.f();rn rnrn运行结果:rn1rn1rn2.1rnABCrnrn疑问:x1=x2后,为何输出的x1.a仍为1,而x1.f()却为ABCrn这里的对象的引用之间是怎么赋值的呢?请老师详细解答rn rn还有一个疑问:继承 我们知道继承其实就是类的复制rn那么A继承了B,是不是里面的方法和字段都继承呢?rnrn一开始对上面的问题我是想通过继承来解释rnB继承了A,那么B.f()就是"ABC",当x1=x2;rnA.f()也就是"ABC"rn可是x1.a却没有改变,那么通过继承也是解释不通的rnrn我是一位刚学JAVA的学生,可是这个对象的引用问题就是搞不懂,可能问题很简单,也请各位老师能给我详细解答说明下,再次感谢
请教一下,如何释放session资源?
给点代码,谢谢!
请教一下C#的泛型编程
有三个图形类:矩形,线条,椭圆,都有move,resize等方法,但参数与实现有区别,假设如下:rnclass Rectanglernrn Rectangle()rn void move(Size distanse)rn void resize(Size size)rnrnclass Linernrn Line()rn void move(Size distanse)rn void resize(int length)rnrnclass Ellipsrnrn Ellips()rn void move(Point p, Size distanse)rn void resize(int radius)rnrn如果我再增加一个图形类Graph作为这三个类的父类,那么能否像下面这样使用:rnLine line = new Line();rnRectangle rect = new Rectangle();rnGraph graph = (Graph)line;rngraph.resize(50);rnGraph graph = (Graph)rect;rngraph.resize(new Size(100, 100));
请教一下C#与MySql
我想用C#与MySql数据库联接,我下载了并安装了MySqlnet.exe并在引用中添加了CoreLab.MySql.dll,但是出现了“License not found”,请问我因该怎么办?
请教一下stack 的用以及STL释放问题
代码中看到这样一句话:rn[code=c]int width = 12;rnint heigth = 12;rnint maxnum = heigth * width ;rnint stack[maxnum + 1];rnrnint*root = &stack[maxnum] ;[/code]rnrn纳闷了,如果是数组,[]里面也不该有变量啊,rn如果是stack,那我怎么就没见过这种用呢?
请教关于释放内存的问题
如下:rn typedef struct PARArn rn char pszArray[32+1];rn char* pParam;rn char** pResp;rn rn PARA,*PPARA;rnrn PPARA pPara = new PARA;rn memset(pPara,0,sizeof(PARA));rn strcpy(pPara->pszArray,"Test");rn rn pPara->pParam = new char[30];rn memset(pPara,0,30);rn strcpy(pPara,"Test1");rnrn char* pTmp = new char[30];rn memset(pTmp,0,30); rn pPara->pResp = &pTmp;rnrn //...使用pPararnrn delete pPara; //我的问题是这句是否能把所有内存都释放掉,还是rn //还需要把delete pPara->pParam;rn //delete *(pPara->pResp)等加上才释放完全??rn
请教一个内存分配和释放的问题
如果用new申请一个整数数组,如int* p = new int[10];释放的时候能否只释放部分空间,比如说只释放第3个整数所占的内存空间,谢谢!
请教关闭释放窗体的问题
1、模板Excel(aaa.xls)中有一UserForm2,当一打开aaa.xls时UserForm2自动出现。rn在UserForm2中:rnPrivate Sub CommandButton2_Click()rnUnload MernApplication.QuitrnEnd Subrn这样关闭了aaa.xls,但是我再打再一个新的Excel工作簿时(不是aaa.xls),UserForm2也会自动出现。rn要如何才能不让它出现呀?rn
请教一个连接池释放的问题
对于Java连接池,我一直有一个疑问一直没有得到解决,请大家帮忙解惑:rn1. Java里自己写的连接池,如果要释放是否要这样显式执行?rnif(con!=null&!con.isClosed())rnrn con.close();rn con=null;rnrn2. 如果是的话,是不是表示这个Con已经被关闭了?下次使用时还得重新建立?那么这个池和每次使用时建立Con有什么区别?rn3. 如果不是的话,请指导如何正确释放连接Con?rn4. 我尝试con.close();connectionMan.freeConnection(connName, conn);后(未设置con=null),刷新时提示connection已关闭的错误rn------------rn public synchronized void freeConnection(Connection con) rn rn this.freeConnections.add(con);//添加到空閒連接的末尾rn this.inUsed--;rn rn------------rnrn
请教关于释放内存空间的问题
// 赋值函数rnString & String::operate =(const String &other)rnrn// (1) 检查自赋值rnif(this == &other)rnreturn *this;rn// (2) 释放原有的内存资源rndelete [] m_data;rn// (3)分配新的内存资源,并复制内容rnint length = strlen(other.m_data);rnm_data = new char[length+1];rnstrcpy(m_data, other.m_data);rn// (4)返回本对象的引用rnreturn *this;rnrn这是一个cstring 类的赋值函数,我的问题是若类的length变量的大小永远一致,那还有必要delete 和new吗?就只用一处固定空间不就可以吗?rn好象是很简单的问题,但是小弟出来咋到不敢确定,对new与delete也不是太熟,请教各位前辈关于这个的信息!rn谢谢大家~~~~~~~~~~~~~~~~~~~~rn
请教,COM静态局部变量的释放问题
函数中定义了一个COM型的静态局部变量,用ATL的COMQIptr声明的,并且把它作为函数的返回值;当程序整个退出的时候,在这里报内存访问错误了,应该怎么处理呢?
请教有关句柄释放的问题?
本人在用win32 api写以下多线程网络通讯服务程序过程中发现程序使用的句柄在一直增加,而不会释放,所增加的句柄是通过createthread函数产生的,clientthread是单循环,自然退出。如果使用closehandle紧跟有createthread之后将句柄释放掉,程序也能正常运行,而且打开的句柄数一直保持不变,但总决得有些不对,请教各位高手,如何在适当的地方释放句柄。rnrnHANDLE dwClientThread ;rn...rnwhile (1)rn rn nLen = sizeof(SOCKADDR_IN);rnrn socketClient = accept(listenSocket,(LPSOCKADDR)&SockAddr,&nLen);rn if (socketClient == INVALID_SOCKET)rn break;rn ...rn ...rn ...rn dwClientThread = CreateThread(NULL,0,ClientThread,(void *)lpReq,0,&ThreadAddr);rnrn //CloseHandle(dwClientThread);rn rnrn另外,在另一个已写好的服务程序中, 有一个功能是启动另外一个进程,而此服务程序在启动进程后,每次会多增加三个句柄,一直递增,查看了所有代码,产生句柄的地方,最后都使用closehandle进行释放了,但还是无法发现是哪里产生的句柄。请问,如何在程序中控制句柄数量,使其不会一直增加,最好给一段例程。rn
请教:关于释放进程的问题
为什么实际运行中,我的Excel进程没有被释放呢?rn代码如下:rnDim oExcel As Object = CreateObject("Excel.Application")rn Dim oBooks As Excel.Workbooks, oBook As Excel.Workbookrn Dim oSheets As Excel.Sheets, oSheet As Excel.Worksheetrn Dim oCells As Excel.Rangern Dim FILE As Filern Dim sFile As String, sTemplate As Stringrn Dim i, j, lineCnt As Integerrnrn Tryrn sTemplate = D:\Template\test.xls"rn sFile = "E:\testxls"rn If FILE.Exists(sFile) Thenrn FILE.Delete(sFile)rn End Ifrn FILE.Copy(sTemplate, sFile)rn oExcel.Visible = False : oExcel.DisplayAlerts = Falsern 'Start a new workbookrn oBooks = oExcel.Workbooksrn 'Load template rn oBook = oBooks.Open(sFile)rn oBook = oBooks.Item(1)rn oSheets = oBook.Worksheetsrn With Gridrn Dim sData As Stringrn sData = ""rn lineCnt = .Rows + 3rn For i = 3 To .Rows - 1rn For j = 1 To .Cols - 1rn If .get_TextMatrix(i, j) Is Nothing Thenrn sData = sData & vbTab & ""rn Elsern sData = sData & vbTab & .get_TextMatrix(i, j).Replace(Chr(10), "").Trimrn End Ifrn Nextrn sData = sData & vbCrLfrn Nextrn System.Windows.Forms.Clipboard.SetDataObject(sData)rn End Withrnrn 'Paste the data.rn oSheet.Cells(7, 1).Select()rn oSheet.Paste()rn oCells(7, 2).Select()rn oExcel.ActiveWorkbook.Save()rn Catch ex As Exceptionrn log.trace(ex.ToString)rn MessageBox.Show("error", "注意", MessageBoxButtons.OK, MessageBoxIcon.Error)rn Exit Subrn Finallyrn oBook.Close()rn oBooks = Nothing : oBook = Nothingrn oSheets = Nothing : oSheet = Nothing : oCells = Nothingrn oExcel.Quit()rn oExcel = Nothingrn GC.Collect()rn End Try
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数