linux:跑程序时内存一直增加

dcwdch 2011-12-16 10:16:21
linux小弟写了个程序,当做脚本时内存一直在增加,请教各位大侠具体是什么原因:
在线等

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <deque>
#include <string>
#include <curl/curl.h>
#include <iostream>
#include <unistd.h>
//#include "/usr/include/mysql/mysql.h"
using namespace std;
//全局变量
int onlineNu;
int firstonlineNu;
int secondonlineNu;
int thirdonlineNu;
int online;

int sendInfo(int &onlineNumber)
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
int num1;
int logtime;
int appid;
char sql[200] = {0};
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,"localhost","datacenter","q9UGszLPpjuREN4B","dc",0,NULL,0))
{

printf("store user_allow_chgpass error: %s",mysql_error(&mysql));
printf("connection false!\n");
return 0;
}
snprintf(sql, sizeof(sql), "select logtime,appid from online_and_play where online = '%d' order by logtime desc limit 0,1", onlineNumber);
if(mysql_query(&mysql,sql))
printf("query is ok!\n");
res=mysql_store_result(&mysql);
num1 = mysql_num_rows(res) ;
int i,t;
char pp[200];
for(i=0;i<num1;i++)
{
row=mysql_fetch_row(res);
logtime = atoi(row[0]);
appid = atoi(row[1]);

}
snprintf(pp, sizeof(pp), "appid=%d&logtime=%d&online=%d&firstonlineNu=%d&secondonlineNu=%d&thirdonlineNu=%d",appid,logtime,online,firstonlineNu,secondonlineNu,thirdonlineNu);
mysql_free_result(res);
mysql_close(&mysql);
CURLcode cres;
CURL *curl;

char curlURL[100] = "http://data.boyaa.com/online_test/onlinemail.php";
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL,curlURL);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,pp);
cres = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
int main()
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
deque <int>::iterator Iter;
deque<int> dec;
double avg;
int sum;
double result;
double result1;
int i,t;
int num;
char str[200];
int arr[18] = {23,24,26,27,29,30,31,32,35,36,39,40,45,58,59,76,98,103};
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,"localhost","datacenter","q9UGszLPpjuREN4B","dc",0,NULL,0))
{

printf("store user_allow_chgpass error: %s",mysql_error(&mysql));
printf("connection false!\n");
return 0;
}
while(1)
{
for(int i=0;i < 18 ;i++)
{
sum = 0;
avg = 0;
int id = arr[i];
snprintf(str,sizeof(str),"SELECT * FROM (SELECT * FROM online_and_play WHERE `appid` = %d ORDER BY logtime DESC LIMIT 0 , 4) a ORDER BY a.logtime DESC",id);
if(0 != mysql_query(&mysql,str))
printf("%s\n", mysql_error(&mysql));
res = mysql_store_result(&mysql);
num = mysql_num_rows(res) ;
if(num < 4)
continue;
for(i=0;i<num;i++)
{
row = mysql_fetch_row(res);
online = atoi(row[2]);
dec.push_back(online);
}
for(Iter = dec.begin(); Iter <= dec.end()-2;Iter++ ){
sum += *Iter;
}
avg = double(sum) / 3;
result = avg - dec.at(dec.size()-1);
result = result<0 ? (-result):result;
result1 = result / avg;
if(0.25 < result1)
{
onlineNu = dec.at(dec.size()-1);
firstonlineNu = dec.at(dec.size()-2);
secondonlineNu = dec.at(dec.size()-3);
thirdonlineNu = dec.at(dec.size()-4);
sendInfo(onlineNu);
}
dec.clear();
mysql_free_result(res);
}
sleep(10);
}
mysql_close(&mysql);
}



...全文
441 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangwei890702 2011-12-16
  • 打赏
  • 举报
回复
一看这个就不懂,需要努力学习啊,
恨天低 2011-12-16
  • 打赏
  • 举报
回复
多使用检查工具。如Valgrind
周晓荣 2011-12-16
  • 打赏
  • 举报
回复

printf("store user_allow_chgpass error: %s",mysql_error(&mysql));
printf("connection false!\n");
return 0;
}
while(1)//这里的while有退出条件么?你发帖时最好整理下代码,不排版好难看
{
for(int i=0;i < 18 ;i++)
{
sum = 0;
avg = 0;
int id = arr[i];
dcwdch 2011-12-16
  • 打赏
  • 举报
回复
大侠们,不要潜水啊。小弟真的是不懂啊,有人说一直连接数据而没有关闭的话也可能造成那样的情况。上浮啊,大神们
peng_weida 2011-12-16
  • 打赏
  • 举报
回复
帮顶 我也想知道原因!
dcwdch 2011-12-16
  • 打赏
  • 举报
回复
已经知道什么原因了,多谢兄弟们的关注给分了
dcwdch 2011-12-16
  • 打赏
  • 举报
回复
不是while循环的错误,我现在正在用GDB调试,看看究竟到哪儿会出现内存一直增加的情况

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧