恐怖的野指针

在C++类中出现野指针大概率是浅拷贝的问题

/*
1.浅拷贝的意思是类中成员有部分是在对上申请的空间赋值, 然后当直接用一个对象对另一个对象赋值的时候, 如果没有重载运算符或者重写拷贝构造函数, 那么就会按照位复制的方法, 那么此时类中的成员指向的是同一块内存空间,如果其中一个类被释放, 调用了析构函数, 那么另一个类指向了一片被释放的空间, 此时如果这个类也被释放了, 那么系统就会提示二次释放, 此时这个类中的成员就是野指针
2. 函数返回值出现的野指针, 如果我们在函数内部想返回局部空间, 此时被接受的也是野指针, 野指针的作用非常的恐怖如下例子
*/

#include <stdio.h> 

class CTestClass 
{ 
public: 
	CTestClass( void ); 
	int m_nInteger; 
	void Function( void ); 
}; 

CTestClass::CTestClass( void ) 
{ 
	m_nInteger = 0; 
} 
void CTestClass::Function( void ) 
{ 
	printf( "This is a test function.\n" ); 
} 

int main( void ) 
{ 
	CTestClass* p = new CTestClass; 
	delete p; 
	p->Function(); 
    
    return 0;
} 

/*
	平常我们释放完指针以为就安全了, 其实并没有, 他还是指向了那片内存空间, 还是能调用类中的方法函数, 虽然他的作用不大, 但是他调用了并不属于自己的控件
	解决方式是在每次释放空间以后把指向这一片空间的指针全部指向NULL
*/

腾讯笔试题目

#include 'stdafx.h'  
#include <iostream> 
#include <string> 
using std::cout; 
using std::endl; 
class Test 
{ 
public: 
	Test() 
	{ 
		a = 9; 
		delete this; 
	} 
	~Test() 
	{ 
		cout<<'destructor called!'<<endl; 
	} 
	int a; 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
	Test *mytest = new Test(); //mytest的值和this指针的值是一样一样的 
	cout<<mytest->a<<endl; 
    
	return 0; 
} 
/*
	运行的时候并不会报错, 编译也是正常输出,只不过输出的值是垃圾值
*/
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值