Je met d'abord mon code :
[...][...]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 char *buffer; while(1) { buffer = getsource(lines2, lines, NULL); // traitement free(buffer); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 char *getsource(char *quoi, char *ou, char *page) { int sock; char *input = malloc((sizeof(*input) * (MAX_IO +1))); if (input == NULL) return 0; size_t current_size = (MAX_IO + 1), total = 0, t = 0; sock = init_sock("193.252.242.142", 80); if (sock == 0) { free(input); return 0; } sendSock(sock, "blabla %s", quoi); // J'en ai plusieur des sendSock comme ca while((t = recv(sock, input + (total), 2048, 0)) > 0) { total += t; if ((total+2048) > current_size) { current_size += (MAX_IO+1); input = realloc(input, current_size); if (input == NULL) return 0; } } input[total] = '\0'; closesocket(sock); return input; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SOCKET init_sock(char *ip, unsigned int port) { SOCKET sock; SOCKADDR_IN sin; sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr(ip); sin.sin_family = AF_INET; sin.sin_port = htons(port); if (connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == -1) { return 0; } return sock; }Mon problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 int sendSock(SOCKET sock, char *buf, ...) { char buff[MAX_IO+1]; // A changer car lil int len, t_bytes = 0, r_bytes, n; memset(buff, '\0', MAX_IO+1); va_list val; va_start(val, buf); vsnprintf(buff, MAX_IO - 2, buf, val); va_end(val); len = strlen(buff); r_bytes = len; while(t_bytes < len) { n = send(sock, buff+t_bytes, r_bytes, 0); if (n == -1) { break; } t_bytes += n; r_bytes -= n; } len = t_bytes; return (n==-1 ? -1: 0); }
Sous Linux en natif : Pas de fuite de mémoire
Compilé avec gcc-mingw (sous Linux) et lancé avec wine : Pas de fuite de mémoire
Compilé avec gcc-mingw (sous Linux) et lancé directement sous Windows : La mémoire monte, monte, monte.....(BOOM)
La fuite ne peux venir que du malloc ? des variables dans la stack Oo (sendSock que j'appel souvent) ?
Merci![]()
Partager