네트워킹 클래스의 경우 UDP 프로토콜을 기반으로하는 비트 토 런트 클라이언트를 구축하고 있습니다.이 프로토콜은 몇 가지 이유로 C 문자열에 많은 문제가 있습니다. 여기Char * 배열이 값을 보유하지 않음 C
if(server_data == NULL){
server_data = malloc(one_block.total_blocks*sizeof(char*));
int i;
for(i = 0; i < one_block.total_blocks; i++){
server_data[i] = malloc(sizeof(char*));
server_data[i] = "";
}
}
는 SERVER_DATA가 char**
하고 one_block 패킷 정보와 페이로드를 보유하고 struct
입니다 :
내가 패킷을 수신 처음, 내가 할.
다음으로 내가 할 : 나는 모든 패킷이 수신되기 전에 SERVER_DATA의 내용을 인쇄 할 때
server_data[one_block.which_block] = one_block.payload;
blocks_rcv++;
if(blocks_rcv == one_block.total_blocks-1)
done = TRUE; //macro
if(done){
int i;
for(i = 0; i < one_block.total_blocks; i++){
printf("%s", server_data[i];
}
}
모두 잘 멋쟁이하지만 어떤 미친 이유로 보인다, 나는 각 패킷에서 다른 데이터를 참조하십시오. 그런 다음 done = TRUE로 설정하고 for 루프로 들어가서 배열의 모든 지점에 동일한 문자열 값이 포함됩니다.
왜 이런 일이 일어나는 지 잘 모르겠지만 배열의 내용이 게시물의 처음부터 끝까지 어떻게 변했는지 이해하고 싶습니다. 한 번에 하나의 패킷. 그것은
server_data[i] = "";
리터럴 문자열에 대한 포인터로 할당 된 포인터를 덮어 쓰기 :
'server_data [i] = "";/* memory leak * /' – FatalError
만약 당신이'malloc (sizeof (char *));'를 사용한다면 당신은 4 또는 8 바이트만을 할당한다. –