当执行以下,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