문자열의 길이를 가져 오는 동안 :SEGV 신호는 I이 다음 코드 데
: INTlen = strlen(trimmed_id_tran_typ_);
에서 여기
int Class::set(const char * id_tran_typ_)
{
char *trimmed_id_tran_typ_ = NULL;
trimString(id_tran_typ_, &trimmed_id_tran_typ_);
int len = strlen(trimmed_id_tran_typ_);
if (len < 1)
_id_tran_typ = DEFAULT_STRING;
else
_id_tran_typ = id_tran_typ_;
delete[] trimmed_id_tran_typ_;
trimmed_id_tran_typ_ = NULL;
return SUCCESS;
}
나는 SEGV 신호를 얻고을 trimString 기능은 다음과 같이이다
char *trimString(const char *sP_, char **dP_)
{
*dP_ = NULL;
if (sP_ == NULL)
return *dP_;
const char *lastPos = (char *)&sP_[strlen(sP_)];
const char *startPos = (char *)sP_;
const char *endPos = lastPos;
int len = strlen(sP_);
for (; endPos != sP_; endPos--)
{
if (*(endPos - 1) != ' ')
{
len = endPos - sP_; // *endPos = '\0';
break;
}
}
if (len == 0) // if (*endPos != '\0')
{
*dP_ = new char[1];
*dP_[0] = '\0';
return *dP_;
}
for(; startPos < endPos; startPos++, len--)
{
if (*startPos != ' ')
break;
}
if (startPos == endPos)
{
*dP_ = new char[1];
*dP_[0] = '\0';
return *dP_;
}
*dP_ = STRDUP(startPos, len);
return *dP_;
}
이제 세분화 오류가 발생하는 이유는 무엇입니까?
trimString()
함수가 보낸 set()
함수에서 문자열을받지 못했습니까?
char *STRDUP(const char *sP_, const int len_)
{
if (! sP_)
return NULL;
else if (len_ < 1)
return NULL;
char *newP = new char [ len_ + 1] ;
memset(newP, '\0', len_+1);
strncpy(newP, sP_, len_);
return(newP);
}
'STRDUP'은 가장 중요한 부분을 생략했습니다. –
'STRDUP' 외에도'set '을 어떻게 호출할까요? –
세그먼트 화 오류와 연결된 set() 호출은 어떻게 여기에 있습니까? – Mariners