배열이 꽉 찼을 때 문자열 배열에 문자열을 저장하는 C++ 프로그램을 작성했습니다. 아래 코드를 사용하여 더 많은 항목을위한 공간을 만들기 위해 배열의 크기를 조정합니다. 하지만 때때로 (항상은 아니지만) "delete [] temp;"에서 충돌합니다. 라인과 나는 왜 그것을 어떻게 고칠 지 모른다. 도와주세요.C++ delete [] crashes
나는 많은 것을 수색했지만 어느 곳에서도 대답을 찾을 수 없었다. 내가 그것을 디버그 할 때 "잘못된 포인터"라고 말하지만, 데이터를 저장하기 전에 어떻게 잘못 될 수 있습니까? 그리고 아직 해제하지 않았습니까?
if(item_cnt >= (arr_size - 1))
{
int oldsize = arr_size;
string * temp;
arr_size *= 2;
temp = arr;
arr = new string [arr_size];
memcpy(arr, temp, oldsize * sizeof(temp));
delete[] temp;
}
스타일의 몇 가지 점 : 당신은'memcpy'가 아니라'std :: copy'를 사용해야합니다. 그리고 수동 메모리 관리 ('new','delete' 등)를해서는 안되며 컨테이너 클래스를 사용하여 자동으로 처리해야합니다. –
'memcpy (arr, temp, oldsize * sizeof (temp));'- sizeof (* temp)가 아니겠습니까? (예, 물론, memcpy는 처음부터 잘못되었습니다.) –
이것은 나쁜 것입니다 ... 문자열에 memcpy를 사용하지 마십시오. 'string myString (toBeCopied);'을 사용하십시오 : http://anaturb.net/C/string_exapm.htm –