这时指针排上用场了,既然传参传的是值,那么如果参数为指针,那传的也是地址的值,同个地址对应的变量也是同一个,那就可以直接通过修改该地址指向的内存数据来修改函数外的变量了: void changeValue(int* x){ *x = 9; } int main(){ int x = 10; changeValue(&x); printf("x: %d\n", x); } 运...
指针指向的内存被free或者delete释放后,指针的值仍然为刚刚被释放的那块内存的首地址,但是此时指针已经失去了对那块内存的合法访问权限。 如下程序所示: intmain(){int*p=NULL;p=malloc(sizeof(int));*p=3;printf("Before free, p = %p, *p = %d\n",p,*p);free(p);/* 注意,此时p和p指向的内容并没...
因此,在使用delete关键字释放内存空间后,最好将指针变量赋值为NULL,以防止对已释放内存的误操作。 总之,通过delete关键字可以释放使用new关键字动态分配的内存空间,避免内存泄漏和程序崩溃。使用delete关键字需要遵循相关的注意事项,以确保正确释放内存空间并避免程序的潜在问题。
delete p; delete p;//该语句出错,应该删除或者注释 return 0; } 也就是说对指针变量P使用了两次delete,而且p所指向的并不是NULL,是一个new出来的具体的有效的地址,因此,在上述环境中编译不会提示错误,而运行时候出现错误。如果项目足够大,找这种错误会让你非常头疼。 总结来说,对一个非NULL指针,不要多次del...
delete [ ] 指向该数组的指针变量名; 两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。
语法:delete 指针或delete[] 指针,例如:delete ptr或delete[] arr。 返回值:无。 与C语言中的malloc和free相比,new和delete的优势在于: new和delete是运算符,而不是函数,因此它们可以重载,从而实现自定义的内存分配和释放策略。 new和delete会调用对象的构造函数和析构函数,从而确保对象的正确初始化和清理。
(1)malloc和new都是在堆上分配内存。栈区的内存分配是系统自动分配释放的,主要存放函数的参数值、局部变量的值等。 (2)Malloc和free在C程序中使用,而C++程序中使用new和delete,删除数组delete[]p,指针释放后,要将指针置空。 (3)New和delete可以调用构造函数和析构函数。
1.2.1 指针变量未初始化 任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 1.2.2 指针释放后未置空 别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把...
指针就是这样形成的。 下面用代码说明 #include <stdio.h>int main(void){char ch = 'a';int num = 97;printf("ch 的地址:%p",&ch); //ch 的地址:0028FF47printf("num的地址:%p",&num); //num的地址:0028FF40return 0;} 指针的值实质是内存单元(即字...