Tôi đang gửi tệp văn bản - máy khách-máy chủ chia nhỏ văn bản thành các gói 512 byte nhưng một số gói chứa văn bản nhỏ hơn kích thước tối đa ở phía máy chủ khi nhận được mỗi gói tôi gọi malloc() xây dựng một chuỗi một lần nữa, đây có phải là một thực tế xấu? tốt hơn là giữ một bộ đệm hoạt động có thể phù hợp với độ dài tối đa và tiếp tục lặp lại, sao chép và ghi đè các giá trị của nó?Làm thế nào xấu nó là để giữ gọi malloc() và miễn phí()?
okay @ n.m. đây là mã, điều này nếu nằm trong vòng lặp for (;;) được chọn bởi()
if(nbytes==2) {
packet_size=unpack_short(short_buf);
printf("packet size is %d\n",packet_size);
receive_packet(i,packet_size,&buffer);
printf("packet=%s\n",buffer);
free(buffer);
}
//and here is receive_packet() function
int receive_packet(int fd,int p_len,char **string) {
*string = (char *)malloc(p_len-2); // 2 bytes for saving the length
char *i=*string;
int temp;
int total=0;
int remaining=p_len-2;
while(remaining>0) {
//printf("remaining=%d\n",remaining);
temp = recv(fd,*string,remaining,0);
total+=temp;
remaining=(p_len-2)-total;
(*string) += temp;
}
*string=i;
return 0;
}
Một dòng mã trị giá một nghìn nhận xét. –
@ n.m. Tôi đã thêm mã vào bài đăng chính – cap10ibrahim