2

文字を削除しようとすると、アクセス違反エラーが発生します。

私のコードは次のとおりです。

int main()
{
    char *myString = new char[32];
    myString = "Hello";
    cout << myString;
    cin.get();

    delete [] myString;
    return 0;
}

私も試してみました

delete myString

しかし、まだアクセス違反エラーが発生します

4

4 に答える 4

8

ラインの後

 myString = "Hello";

ポインタmyStringは、割り当てた配列ではなく、文字列リテラルを指します。この線

delete [] myString;

次に、リテラルを削除しようとします(これによりクラッシュが発生します)。

文字列をコピーするには、を使用します。strcpyさらに良いのは、を使用することstd::stringです。

std::string myString = "Hello";
cout << myString;
于 2012-10-29T09:46:59.640 に答える
4
char *myString = new char[32];
myString = "Hello";

myStringこれにより、変数が他の何か(具体的には、定数「Hello」文字列)に再割り当てされます。そうしないでください。本当にcharポインタが必要な場合は、

strcpy(myString, "Hello");

またはさらに良い

char *myString = strdup("Hello");

次に、を使用して割り当てられたメモリを解放します

free(myString);

それ以外の

delete [] myString;

これはエラーになります。

しかし、それをしないでください。std::string代わりに使用してください。

于 2012-10-29T09:47:31.843 に答える
0

「こんにちは」が割り当てられているメモリを削除しようとしています。ポインタの代わりにstrcpyを使用してコンテンツをコピーする必要があります。

于 2012-10-29T09:47:21.577 に答える
0

次の行が原因でアクセス違反が発生します。ポインターは、割り当てた動的メモリを参照しなくなり、削除できない代わりにリテラルの「hello」を指しています....

myString = "Hello";

その行もあなたが望むことをするつもりはないので、使用する必要があります(この変更では新規/削除する必要がないことに注意してください)

char myString[32];
strcpy(myString,"Hello")

またはそれ以上strncpy... Googleまたは本で調べてください。

または、C++ を使用しようとしている場合はさらに良い

std::string myString;
myString = "Hello"; 
于 2012-10-29T09:55:31.903 に答える