static和new连用,并且delete多次出现的有趣问题
2017-08-15 20:02
483 查看
#include "stdio.h" #include "stdint.h" #include<algorithm> #include<vector> /* 2 4 8 1 1 1 1 1 3 1 1 5 6 3 3 2 1 1 1 KHOOOOB! HUTUTU! */ using namespace std; void dataPorcess(int16_t cake_side, int16_t cake_num, int16_t *eachSide) { } int main() { int16_t caseNum = 0; int16_t caksSide = 0; int16_t cakePiece = 0; scanf("%hd",&caseNum); for(int16_t i = 0; i < caseNum; i++) { int16_t receiveDataCount = 0; while(true) { int16_t tempReceive = 0; int16_t scanfRetrun = scanf("%hd", &tempReceive); // 忘记最后还要点一下回车。。。。。。 if(scanfRetrun == 1) { receiveDataCount ++; if(receiveDataCount == 1) { caksSide = tempReceive; } else if(receiveDataCount == 2) { cakePiece = tempReceive; } else { static int16_t *pEachPiceSide = new int16_t[cakePiece]; pEachPiceSide[receiveDataCount - 3] = tempReceive; if(receiveDataCount == cakePiece + 2) { dataPorcess(caksSide, cakePiece, pEachPiceSide); if(i == caseNum - 1) delete []pEachPiceSide; break; } } } else if(scanfRetrun == 0) { scanf("%*c"); } else // EOF { break; } } } return 0; }
先直接上个正确代码,这是一个简单的acm读取数据并且处理的程序 http://poj.org/problem?id=1020
主要遇到的问题是标红的地方!
在else 里面必须使用 static 来定义 pEachPiceSide 这个指针,否则第二次进入循环后又会重新new一个空间。用static可以完美解决这个问题。
可是刚开始我是没有在delete前面加if条件语句的,也就是每次dataprocess处理完就会删除一次指针。
最后的结果导致内存泄漏!
debug发现除了第一次delete发挥了他的作用,剩下的delete都没有用。
其实是因为new一次过后只能delete一次,之所以还能用这个指针是因为指针所代表的地址是还存在的,只是编译器把这个地址所代表的东西给收回了。
写到这个发现也没什么大不了的,就是一个简单的new一次 只能delete一次的问题。
但反正都写了 就发出来吧,不喜勿喷!
相关文章推荐
- p重新调用多次new及delete的内存泄露问题
- char* p = new char [20] delete p 出现问题!
- 如何解决win10自带microsoft edge出现打不开标签页、打开标签页后闪退、新建标签页后卡死、页面跳转后打不开新页面并且原页面自己重复刷新等问题
- 关于asp.net页面通过url传值,中文出现乱码的一些有趣的问题~~~
- c++中new和delete,delete[]的匹配问题(转载)
- GROUP BY 与count(*) 连用的时候出现问题,读不到数据
- C++中new与delete问题学习
- Scanf连续调用多次并且存在%c的问题
- 关于Android file.createNewFile() 方法出现的问题总结
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
- nextInt()与nextLine()连用时出现的问题
- Yii使用DeleteAll连表删除出现报错问题的解决方法
- 模块间调用重载new和delete问题
- C++里 数组new 和delete问题
- 工程管理问题:坚决杜绝出现同名类并且同路径
- iOS开发-黑科技防止多次添加删除KVO出现的问题
- “超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。”问题的解决方法
- C++中new与delete问题学习
- inputStreamReader(new FileInputStream(file),"UTF-8")出现乱码的问题
- 按钮点击多次出现多个相同页面问题