にエラーがある理由がわかりませんでしdelete[] *iopszString;
た。修正を手伝ってもらえますか?
入力を試してください:1 3 aaa
最後の delete[] を省略すると、すべて機能しますが、ポインターを交換するために前のポイントを削除する必要があるため、意味がありません。 コード
// Notepad.cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// Method definition
void addText(char** iopszString);
void main()
{
// Const definition
int const ADD = 1;
int const UPDATE = 2;
int const DELETE = 3;
int const SAVE = 4;
int const EXIT = 5;
// Variable definition
int nUserCode;
// Code section
// Gets the user code
cout << "Enter the code: " << endl;
cin >> nUserCode;
// + "\0" so 1 minimum!!!
char* iopszString = new char[1];
iopszString = "";
// Runs until the exit code
while (nUserCode != EXIT)
{
// Checks the exit code
switch (nUserCode)
{
case ADD:
{
addText(&iopszString);
cout << iopszString << endl;
break;
}
case UPDATE:
{
break;
}
case DELETE:
{
break;
}
case SAVE:
{
break;
}
default:
{
cout << "Wrong code, try again" << endl;
break;
}
}
// Gets the user code
cout << "Enter the code: " << endl;
cin >> nUserCode;
}
// Delete the string cuz heap
delete[] iopszString;
}
void addText(char** iopszString)
{
// Variables definition
int nAddLength;
// Code section
// Gets the new length
cout << "Enter the length of the added string: " << endl;
cin >> nAddLength;
// Always remember - the length you want+1!!
char* szNewString = new char[nAddLength+1];
// Gets the new string
cout << "Enter the new string which you want to add: " << endl;
cin >> szNewString;
// Creating a new string (result)
char* szResult = new char[nAddLength+1+strlen(*iopszString)];
// Copies the old string to the new
strcpy(szResult, *iopszString);
strcat(szResult, szNewString);
// Deletes the new string cuz we already copied
delete[] szNewString;
// Exchange pointers
//strcpy(*iopszString, szResult); <--- never
// The problem!
delete[] *iopszString;
// Exchange pointer
*iopszString = szResult;
}