私は現在C_String
、文字列へのポインタを使用して変更するプログラムを書いています。私は正常に動作する実装を持っています。私が直面している唯一の問題は、プログラムの最後に到達したときに、ポインターを削除しようとするとエラーが発生することです。
私のコード:
void CStringSwitcher()
{
string input = "";
char* cStringArray = new char[ASIZE];
char* reversed = new char[ASIZE];
const char* originalReversed = reversed;
char* pointers[POINTER_SIZE];
memset(reversed, '\0', ASIZE);
memset(cStringArray, '\0', ASIZE);
memset(pointers, '\0', POINTER_SIZE);
char* current = cStringArray;
cout << "Enter a sentence on each line. Input a 0 to stop." << endl;
// Receives input from the user and stores it into cStringArray
int i = 0;
do
{
cout << ">";
cin.clear();
fflush(stdin);
input = "";
getline(cin, input);
if (input == "0")
break;
else
{
input.append("\n");
pointers[i] = current;
_CRT_SECURE_STRCPY(pointers[i], ASIZE - 1, input.c_str());
current += input.length();
i++;
}
} while(i < POINTER_SIZE);
char* end = current;
--i;
do
{
/// Check if done
if(i < 0)
break;
/// Copy from current to end
current = pointers[i];
do
{
*reversed++ = *current++;
}while(current < end);
/// Update end
end = pointers[i];
/// Update i
--i;
}while(true);
*reversed = '\0';
cout << endl << originalReversed << endl;
system("PAUSE");
//delete[] originalReversed;
//delete[] cStringArray;
return;
}
上に書かれているように、コードは正常に動作しますが、リターンの直前にある 2 つの削除行のコメントを外すと、エラーが発生しました。
Project_06.exe がブレークポイントを開始しました
そしてプログラムがクラッシュします。奇妙なことに、エラーメッセージの正確な文言を取得するためにプログラムを再度実行したところ、エラーなしで実行されましたか? それがなぜなのかについてのアイデアはありますか?