Утечка памяти в функции - C (СИ)
Формулировка задачи:
Сама суть
Есть fcgi-приложение которое парсит полученные get-данные и потом производит выборку по MySQL.
В приложении есть функция, через которую утекает память, остальные отключал утечка продолжалась, отключил эту - утечки нет.
Вот сама функция
Где char *s нужный get в запросе (например "local"), а char *gete это переданный getenv("QUERY_STRING")
Пробовал с использованием strtok - эффект тот же - утечка.
Все мозги себе сломал, откуда уткает.
OC Linux, сервер Lighttpd
Пожалуйста, помогите.
char * GET_(char *s, char *gete){
char query[100000], url[100000], *ret_1;
int i = 0, flag = 0;
sprintf(url, "&%s", gete);
sprintf(query, "&%s=", s);
if(strstr(url, query) == '\0')
return "";//если такого get не существует
ret_1 = strstr(url, query);
for(i = 0;;i++){
if(ret_1[i] == '&' || ret_1[i] == '\0'){
flag = i;
break;
}
}
ret_1 = strstr(ret_1, "=");
for(i = 0;;i++){
if(ret_1[i] == '&' || ret_1[i] == '\0'){
flag = i;
break;
}
}
for(i = 0;;i++){
if(ret_1[i] == '&' || ret_1[i] == '\0'){
ret_1[i] = '\0';
break;
}else if(ret_1[i] == '='){
continue;
}else{
ret_1[i-1] = ret_1[i];
}
}
ret_1[i-1] = '\0';
return ret_1;
}Решение задачи: «Утечка памяти в функции»
textual
Листинг программы
int qlen;
char *query, *foo, *bar;
if (!(query = env_getvar("QUERY_STRING", &qlen)))
/* ошибка */;;
if (!(foo = query_getarg("foo=", query, qlen)))
/* нету или пустое значение у "foo" в запросе */;;