地震监测系统 8.常见错误总结 9.项目实现 12.内存泄漏检测工具

  1. 申请的内存多次释放
  2. 内存泄漏:忘记delete 去释放内存
  3. 释放的内存不是申请时的内存 如图所示
       int* p = new int[18];
    	p[0] = 0;
    	for (int i = 0; i < 18; i++)
    	{
    		cout << *(p++) << endl;
    	}
    	delete[] p; 

  4. 释放空指针

  5. 释放一个内存块,但继续引用其中的内容

  6. 越界访问,已经用了还没有清理,又继续被用,则会出现越界访问

 项目实现

    算法设计:

  1. 读取头文件并分配内存
  2. 从 数据文件读取地震数据,从键盘读取计算能量的短时间和长时间的窗口测量值的数目:
  3. 计算各个时间点上的短时间窗口和长时间窗口的能量值,打印出可能的地震时间,在这里,因为会涉及到频繁调用短时间和长时间窗口的能量值,我们可以将计算能量值设计为一个单独的函数
    //地震监测系统主要是利用地震检波器收集到的地壳运动信息,从而预测和确定地震的震中以及强度
    
    #include<iostream>
    #include<Windows.h>
    #include<string>
    #include<fstream>
    #include<cmath>
    
    
    
    
    using namespace std;
    
    const double THERDHOLD = 1.5;
    
    //计算短/长时间窗口能量数据的采样值
    double power_w(double arr[], int length, int n);
    
    int main(void)
    {	
    	string filename;
    	ifstream fin;
    	int num = 0, short_window = 0, long_window = 0;
    	double time_incr = 0, * sensor = NULL, short_power = 0,long_power=0,ratio=0;
    	cout << "Enter name of input file" << endl;
    	cin >> filename;
    
    	fin.open(filename.c_str());
    	if (fin.fail())
    	{
    		cerr << "error opening input file" << endl;
    		exit(-1);
    	}
    	else
    	{
    		fin >> num >> time_incr;
    		cout << "num: " << num << "  time_incr: " << time_incr << endl;
    		if (num >= 0) 
    		{
    			sensor = new double[num];
    			for (int i = 0; i < num; i++)
    			{
    				fin >> sensor[i];
    			}
    			cout << "Enter number of points for short_window" << endl;
    			cin >> short_window;
    			cout << "Enter number of points for long_window" << endl;
    			cin >> long_window;
    			//分析能量数据,找出地震事件
    			for (int i = long_window - 1; i < num; i++)
    			{
    				short_power = power_w(sensor, i, short_window);
    				long_power = power_w(sensor, i, long_window);
    				ratio = short_power / long_power;
    				if (ratio > THERDHOLD)
    				{
    					cout << "Posiible even at" << time_incr * i << "seconds\n";
    				}
    
    			}
    			delete[] sensor;
    		}
    		
    		fin.close();
    	}
    	
    	system("pause");
    	return 0;
    
    }
    
    
    double power_w(double arr[], int length, int n)
    {
    	double xsquare = 0;
    
    	for (int i = 0; i < n; i++)
    	{
    		xsquare += pow((length - i), 2);
    	}
    	return xsquare / n;
    }
    
    
    

内存泄漏检测工具

 VisualC++debugger和CRT

第一步:包含以下头文件

#define_CRTDBG_MAP_ALLOC

#include<stdib.h>

#include<crtdbbg.h>

第二步:接管new 操作符

#ifdef_DEBUG
#ifndefDBG_NEW
#define DBG_NEW new(_NOEMAL_BLOK,_FILF__,__LINF__)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值