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;
}
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);
}
Mon problème :

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