나는 구조체가있는 클래스 (또는 외부, 그것이 중요하지 않길 바래) 안에 한 클래스가있는 프로그램을 작성하고 있습니다. 그 클래스에서 구조체 요소의 배열을 만들 필요가 있습니다. (예를 들어 벡터를 사용할 수 있지만 프로그램에서는 간단한 동적 배열 만 사용할 수 있습니다.)구조체 요소의 배열 크기를 조정하는 방법
배열을 T * arr[SIZE]
으로 선언합니다. 여기서 T
은 내 구조체입니다. 유일한 문제는 배열의 정확한 크기를 알지 못하고 필요한 경우 크기를 늘릴 필요가 있다는 것입니다. 그래서 크기를 조정하는 기능 썼다 :
if(some cond){
T * tmpArr[newSIZE];
memcpy(tmp, db, newSIZE*sizeof(T));
delete [] arr;
arr = tmpArr;
}
을하지만 MyClass::T[....]
내가 추측 내 arr = tmpArr
표현에 응답 MyClass::T*[SIZE]
와 호환되지 않는 오류를 받고 있어요.
내가 잘못하고있는 것을 말해 줄 수 있습니까? 그리고 T * arr[size]
또는 T * arr = new T[size]
을 선언하는 것이 더 좋고,이 경우 어떻게 배열의 크기를 조정하고 (이전의 메모리를 늘릴 수 있습니까?) 어떻게해야합니까?
UPDATE : 답변
감사합니다, 나는 내 프로그램에 따라 한 :
T * tmp = new T[newSIZE];
memcpy(tmp, db, newSIZE*sizeof(T));
delete [] db;
db = tmp;
을 그리고 지금은 tmp
에 DB를 삭제하고 db
를 할당 한 후, 이상한 일을지고있어 내가 모든 인쇄하려고 db (또는 tmp)에 포함 된 데이터, 그 이상한 것 :
Smith2 Michigan ave▒ ACME, Ltd. One ACME roa▒
Smit▒ Michigan ave` ACME, Ltd. One ACME roa "
One ACME road#@"▒▒▒▒Michigan ave`▒▒▒▒Smit▒"
▒▒ ▒8 Ltd.#Michigan avenuemith4▒aF▒
삭제하고 지정하기 전에 동일한 데이터를 인쇄하면 내가 원하는 일반 텍스트. 그리고 프로그램을 마친 후에 (이전에 없었던 코드로 인해 문제가 발생했을 수 있으므로 Segmentation 오류가 발생합니다). 그건 그렇고, 난 struct
std::string
와 내 창문에 cygwin을 사용하고 있습니다. 여기에 무슨 문제가 있는지 생각해?
T array[size];
그러나이에 삭제 호출해서는 안 :
'tmpArr'은 포인터의 배열입니다. 그건 원치 않는 것 같습니다. 그러나 다시 전체 코드는 약간 의미가 없습니다. –
* "유일한 문제는 배열의 정확한 크기를 알 수 없다는 것입니다."* 크기를 직접 추적해야합니다. –
'std :: vector'를 사용하십시오. –