Salve ragazzi, mentre mi dilettavo a scrivere questo software in C, ho riscontrato un errore assurdo: in sostanza il fine ultimo del programma in questione è quello di prelevare dei dati da una pagina php, dopodichè rielaborarli ed agire di conseguenza.
Vi posto qui di seguito la main
codice:
#include <Windows.h>
#include <curl\curl.h>
#include <transact.h>
#include "stringhe.h"
#include "client.h"
#include "url_protocols.h"
#include "iKey.h"
#include "install.h"
#include "datastream.h"
#define _CRT_SECURE_NO_WARNINGS 1
#define MAX_DATA 1000
#define MAX_PATH 100
#define MAX_PATHi 150
#define VERSION "Aurora;(2.0)"
#define LOG "LMSP.ini"
#pragma comment(lib, "libcurld_imp.lib")
char string[MAX_DATA];
size_t function( char *ptr, size_t size, size_t nmemb, void *userdata){
strcat(string, ptr);
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
FILE * stream;
CURL *curl;
CURLcode res;
char * cmd[4];
char PATHi[MAX_PATHi] = "C:\\Windows\\host\\";
char URL[150] = "http://something/classes.php?request=showUsingId&id=";
int e;
int id;
char FURL[160];
char id_storage[6];
if((stream = fopen(strcat(PATHi, LOG), "r")) == NULL){
e = install("LMSP.ini");
AddAutoStartKey(TRUE);
}
id = getRecord(PATHi);
_itoa(id, id_storage, 10);
sprintf(FURL, "%s%s%s%s", URL, id_storage, "&version=", VERSION);
while(1){
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, FURL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, function);
res = curl_easy_perform(curl);
// printf("%s\n\n", &string);
e = explode(string, cmd, "\n");
client_init(cmd[1], cmd[3]);
string[0] = '\0';
curl_easy_cleanup(curl);
Sleep(1500);
}
}
return 0;
}
il problema sopraggiunge quando, una volta compilato l'intero progetto (Che tengo a precisare, essere formato da una serie di pagine cpp e h contenenenti rispettivamente funzioni e dichiarazioni richiamati dalla main) il programma continua ad allocare sempre più memoria (da 1400KB raggiunge anche i 10000) con una latenza di 1500 secondi (Lo sleep all'interno della mia main!) E' come se qualche funzione all'interno del programma non rilasciasse della memoria una volta terminata... generalmente l'aumento complessivo di memoria è di circa 8KB, ma talvolta, raggiunge anche i 20 o 30 KB!
Come potrei evitare che ciò accada?
PS: All'interno degli altri file cpp sono dichiarate di tanto in tanto alcune costanti col #define, ma ero convinto che una volta prese in considerazione la prima volta, il compilatore definisse la variabile e la corsa finisse lì... sbaglio?
Aiutatemi