char *s=a(); char *a() {char *a=new char[10];return a;}
想释放s是delete还是delete[],实际程序中我用delete[]最后还是报错内存不能被read.求详解,对这个程序到底是用delete,还是delete[]。而不能用的那一个是什么原因
如果只有这几行,是不会报错的呀。
char *a() {char *a=new char[10];return a;} int _tmain(int argc, _TCHAR* argv[]) { char *s=a(); delete[] s; return 0; }
check if the function a and the caller of a are using the same heap,
for instance, one if using vc8, one is vc9, or one if debug the other is release,
especially if they belong to different dlls.
你这个例子应该使用delete [] a;
而报错是由于,你在delete[]后,没有把a = NULL;
另外如果你使用的是微软的编译器。对于简单数据类型的指针,无所谓delete[]和delete.delete也可以释放数组。
你写的语句是有错误的, 应该是 s= NULL; a=NULL;另外那个[]是紧跟在delete后的。
指向同一块地址是一样的,delete[] 对谁操作都是一样的。但是只能操作一次。delete一个已经被delete的指针不好说会有什么情况发生。
如果指向同一个空间。不用调两次。但是对于VC编译器。如果在delete 后,设置了NULL。不会产生异常。在delete之前对NULL进行了检查。
是的,delete是做空检查的。delete空指针是没有问题的,所以楼主delete后一定要设NULL哦。