我有一個錯誤,下面的代碼,其中它會返回給我,發送失敗,因爲「地址家庭不支持的協議」。我在第三行發現了我的錯誤,在for循環聲明後留下了分號。一旦我刪除了這個,一切正常。sendto()與未初始化的字符*緩衝區
struct sockaddr_in their_addr;
if ((numbytes=recvfrom(sockfd, buf, 512, 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1) {
perror("recvfrom") ;
exit(1) ;
}
char thedata[512];
int i;
for (i = 0; i < 512; i++);
{
thedata[i] = 'a';
}
unsigned int addr_len = sizeof(struct sockaddr);
if ((numbytes=sendto(sockfd, thedata, 512, 0, (struct sockaddr *)&their_addr,
addr_len)) == -1) {
perror("sendto") ;
exit(1) ;
}
我的問題是爲什麼這條消息明確地返回給我。我發送了一個未初始化值的數組,但我的假設是,因爲char數組初始化爲512個元素,所以它將爲一行中的所有512個元素分配內存。爲什麼它不發送垃圾值?這是一個比任何事情都好奇的問題,但我想知道更多關於這種情況的信息。
感謝
向我們展示更多關於'their_addr'。在哪裏分配它,如何初始化它等。 – cnicutar
已添加。似乎abligh是正確的,for循環導致我訪問錯誤的內存位置。 – IMerin