0

これは私のコードです:

#include "stdafx.h"
#include <iostream>

using namespace std;

#define MAX 5
#define STR_LENGTH 40

void main()
{
    char *p_str[MAX];

    for (int i = 0; i < MAX; i++)
    {
        *(p_str+i) = new char(STR_LENGTH);
        cout << "Please enter a string:  ";
        cin >> *(p_str+i);
    }

    for (int i = 0; i < MAX; i++)
    {
        cout << *(p_str+i) << endl;
        delete (p_str+i);
    }

}

そして、そこにある最後の行に削除がありますが、そこに到達すると壊れます。解決方法はありますか?

4

1 に答える 1

8

new char(STR_LENGTH)あなたが思っていることをしません。の値に初期化された単一の文字にメモリを割り当てますSTR_LENGTH。書かれているように、バッファオーバーランがあります。それを作るnew char[STR_LENGTH]

配列を割り当てているので、 で割り当てを解除する必要があります。delete [] (p_str+i);もう少し簡潔に言うと、delete [] p_str[i];

于 2013-09-06T14:21:26.653 に答える