segmentation fault 어디서 나는건가요?
글쓴이: boardholic / 작성시간: 목, 2004/12/16 - 4:17오후
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define MAXECHO 1024 #define PORT 7 int main(int argc, char *argv[]) { int sock, recvok; char *servip, *msg, *buffer; unsigned int size; struct sockaddr_in serv, recv; buffer = (char *)malloc(sizeof(MAXECHO)); if(argc < 3) { printf("Usage : %s Server IP Message\n", argv[0]); exit(0); } servip = argv[1]; msg = argv[2]; if((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { printf(" Can't open datagram socket\n"); exit(0); } bzero(&serv, sizeof(serv)); serv.sin_family = AF_INET; serv.sin_addr.s_addr = inet_addr(servip); serv.sin_port = PORT; if(sendto(sock, msg, MAXECHO, 0, (struct sockaddr *)&serv, sizeof(serv)) < 0) { printf(" sendto() Error\n"); exit(0); } printf("Send: %s\n", msg); size = sizeof(recv); if((recvok = recvfrom(sock, buffer, MAXECHO, 0, (struct sockaddr *)&recv, &size) < 0 )) { printf(" recvfrom() Error\n"); exit(0); } printf("Received: %s\n", buffer); close(sock); }
udp 에코 클라이언트 소스인데 이상하게 메세지를 보내면
보내고 받는것가지 되는데 끝에 꼭 세크멘테이션 폴트가 뜨네요.
어디서 잘못된건지 궁굼합니다. 참고로 cygwin에서 사용했습니다.
Forums:
char *servip, *msg, *buffer; servip =
char *servip, *msg, *buffer;
servip = argv[1];
msg = argv[2];
이게 문제네요.
배열로 잡으시거나 malloc을 해주세요.
세그멘테이션 폴트..
실행시 #./ec_udp 127.0.0.1 hello
이런식으로 하기 때문에 위의 방법도 맞는거 같은데요.
그리고 buffer은 malloc잡아줬구요.
servip, msg를 malloc으로 잡고 해도 세그멘테이션 폴트나네요.
나에게 있어 한계란 없다.
무한한 꿈을향해 나아간다.
buffer = (char *)malloc(sizeof(MAXECHO))
buffer = (char *)malloc(sizeof(MAXECHO));
=>
buffer=(char*)malloc(MAXECHO);
from saibi
헉 이럴수가....감사합니다^^*
그런 세밀한 부분에 문제가 있었군요^^
감사합니다.
나에게 있어 한계란 없다.
무한한 꿈을향해 나아간다.
댓글 달기