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

时间:2013-09-06 14:18:24

标签: 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);
    }

}

那里的最后一行,我有删除,但是当它到达那里时它会中断,有什么想法可以解决吗?

1 个答案:

答案 0 :(得分:8)

new char(STR_LENGTH)没有按照您的想法行事。它为单个char分配内存,初始化为STR_LENGTH的值。如上所述,您有缓冲区溢出。设为new char[STR_LENGTH]

现在您要分配一个数组,您应该使用delete [] (p_str+i);或更简洁,delete [] p_str[i];

取消分配数组。