나는 다음과 같은 문제가 있습니다의 내부 저장 : 벡터 복사 개체 수 std 않는 방법
void add(){
cRow Row();
Row.add("Column", "Value");
std::vector<cRow> mRows;
mRows.push_back(Row);
}
cRow::cRow(): mCol(NULL), mVal(NULL) {
}
cRow::add(const char* Col, const char* Val){
mCol = strdup(Col);
mVal = strdup(Val);
}
cRow::~cRow(){
free(mCol);
free(mVal);
}
벡터에 로컬 변수 행을 추가 한 후, 소멸자가 해당 행에 대한라고하며 문자열이 해제됩니다 .
분명히 벡터에 저장된 행의 문자열에 대한 포인터가 해제됩니다. 로컬 범위를 벗어난 후 행에 액세스하면 segfault가 발생합니다.
행의 덤프 보이는 추천 호출 후 :
| (null) | (null) |
-----------------------------------------------------
| (null)| (null) |
| LastContainerUpdatePropagation| 1307967498 |
------------------------ END ------------------------
3 이후 전화 :
| (null) | (null) |
-----------------------------------------------------
| (null)| (null) |
| (null)| (null) |
| LastSystemUpdatePropagation| 1307967498 |
------------------------ END ------------------------
및 새 행을 추가하지 않고 완전히 범위를 떠난 후, 모든 행이 해제되었습니다 .
이제 내 질문 : 어떻게 표준 : 벡터 복사 개체가 있습니까? 포인터를 문자열에 보관하거나 다른 공간에 복사하려면 어떻게해야합니까?
대단히 감사합니다!
'cRow Row()'는 변수를 선언하지 않고 함수를 선언합니다. 게시 한 코드는 실제가 아니며 컴파일도되지 않습니다. 제발, 실제 코드를 게시하십시오. – AnT
두 단어 : [Rule of Three] (http://en.wikipedia.org/wiki/Rule_of_three_ (C % 2B % 2B_programming)) –
그건 세 단어입니다. – bdonlan