별을 사용하여 문제를 일으키는 2 개의 행에 서명했습니다.리눅스에서 메모리를 할당하는 데 문제가 있습니다.
첫 번째 행은 두 번째 서명 된 행에 사용될 로그 파일 용 메모리를 할당합니다. 두 번째로 서명 된 행에 세그멘테이션 오류가 발생합니다. "logfile"이 할당되지 않았기 때문에 발생합니다. load()에서 메모리를 할당하면 제대로 작동하기 때문에 확신 할 수 있습니다. 그러나 load() 메서드가 아니라 클래스의 생성자에서 메모리를 할당하려고합니다.
왜 작동하지 않는지 나는 이해할 수 없다! 이것은 리눅스에서 처음이므로 어쩌면 내가 잘못하고있는 것입니다!
내가 서버 클래스의 소멸자가 표시되지 않습니다, 마르코server::server(){
port = 0;
serverup = 0;
loaded = 0;
logfile = (char *) malloc(SERVER_PATHS_SIZE*sizeof(char)); //****************************
}
int server::load(int in_id, char *in_name, char *in_ip, int in_port,
char *in_rcon, char *in_logfile){
int err;
sprintf(name, "%s\x00", in_name);
sprintf(ip, "%s\x00", in_ip);
port = in_port;
sprintf(rcon, "%s\x00", in_rcon);
sprintf(logfile,"%s\x00", in_logfile); //**********************************
err = urt.set(ip, port, rcon);
if(err < 1){
printf("server::load(): error from urt.set()\n");
return 0;
}
printf("server::load(): server %d loaded!\n", id);
loaded = 1;
return 1;
}
코드를 문제를 보여주는 작동 가능한 (실행 가능하고 실행 가능한) 예제로 줄이십시오. 그렇지 않으면 문제가 어디인지 추측 할 수 있습니다 ... – sleske
'logfile'이 선언 된 곳을 볼 수 없습니다. 클래스 서버의 멤버 변수입니까? 그것은 세계적인가? 예제를 독립 실행 형으로 만드는 것은 디버깅에 중요합니다. – DevSolar
C++을 프로그래밍 할 때'malloc'보다'new'가 일반적으로 더 좋습니다 – knittl