我应该如何在这个场合使用删除c ++

Bor*_*ris 0 c++ delete-operator

所以这是我的代码:

#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);
    }

}
Run Code Online (Sandbox Code Playgroud)

在那里的最后一行,我有删除,但它到达那里时,它有什么想法解决它吗?

Igo*_*nik 8

new char(STR_LENGTH)不会做你认为它做的事情.它为单个char分配内存,初始化为值STR_LENGTH.如上所述,您有缓冲区溢出.做吧new char[STR_LENGTH].

既然你正在分配一个数组,你应该用它来解释它delete [] (p_str+i);,或者更简洁一点,delete [] p_str[i];