當執行以下,GDB說,它的失敗在data()
最後一行:這個函數調用是否有任何理由不起作用?
Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: 13 at address: 0x0000000000000000 0x00000001000021ee in data (srvr=Cannot access memory at address 0x6567612d726572fd ) at /Users/Documents/w11/cs176b/mftp/data.c:121
你看不到任何理由爲什麼它會失敗?
全球CONTROL.C中,最終得到strcpy()
倒是一個IP地址XXXX
char passive_ip[25] = "";
稱爲CONTROL.C
data(passive_ip, passive_port);
data.c
void data(char* srvr, int prt) {
printf("In Data: connecting to %s:%i", srvr, prt);
struct hostent *hp = gethostbyname(srvr);
if (hp == NULL) {
printf("gethostbyname() failed\n");
} else {
printf("%s = ", hp->h_name);
unsigned int i=0;
// while (hp -> h_addr_list[i] != NULL) {
printf("%i %s ",i, inet_ntoa(*(struct in_addr*)(hp -> h_addr_list[0])));
// i++;
// }
printf("\n");
}
char hostname[15];
strcpy(hostname, inet_ntoa(*(struct in_addr*)(hp -> h_addr_list[0])));
int sockfd;
int len;
struct sockaddr_in address;
int result;
char* buffer;
/* Create a socket for the client. */
sockfd = socket(PF_INET, SOCK_STREAM, 0);
/* Name the socket, as agreed with the server. */
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr( hostname );
address.sin_port = htons(prt);
len = sizeof(address);
/* Now connect our socket to the server's socket. */
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result == -1) {
perror("oops (data): client3");
exit(1);
}
read(sockfd, buffer, MY_BUFFER_SIZE);
} // this is line 121
聽起來也許`數據()`函數蕭條堆棧 – 2011-02-10 02:59:00
GDB說,它的失敗在數據的最後一行:原因:13地址:0x0000000000000000 0x00000001000021ee數據(SRVR =地址無法訪問內存0x6567612d726572fd )在/Users/brian/Documents/w11/cs176b/mftp/data.c:121 ...「srvr」是該函數的參數... hmmm – 2011-02-10 03:01:29