#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一次的问题。
但反正都写了 就发出来吧,不喜勿喷!