简体   繁体   English

C++ 无法删除二维数组的第二维

[英]C++ can't delete the second dimension of a 2D array

I am trying to make an array of pointers and each pointer to be an array of only 1 integer.我正在尝试创建一个指针数组,每个指针都是一个只有 1 个 integer 的数组。 Then i want to print this integer and after i print it, i want to delete this pointer so that it can not be printed again.然后我想打印这个 integer 并且在我打印它之后,我想删除这个指针,这样它就不能再打印了。 The problem is that this command "delete[] id_number[i];"问题是这个命令“delete[] id_number[i];” seems not to work.似乎不起作用。

The code:


using namespace std;

int main()
{
    int** id_number= new int* [12];
    for (int i = 0; i < 12; i++)
    {
        id_number[i] = new int[1];
        id_number[i][0] = i;
    }

    for (int i = 0; i < 12; i++)
    {
        cout << "id_number ["<< i << "] [0] = "<< id_number[i][0] << endl;

        delete[] id_number[i];        //Trying to delete each pointer after printing the 
                                        //integer         
    }

    cout << endl << "After the end of loop" << endl;
    cout << "id_number [" << 5 << "] [0] = " << id_number[5][0] << endl;

    return 0;


The outcome:


id_number [0] [0] = 0
id_number [1] [0] = 1
id_number [2] [0] = 2
id_number [3] [0] = 3
id_number [4] [0] = 4
id_number [5] [0] = 5
id_number [6] [0] = 6
id_number [7] [0] = 7
id_number [8] [0] = 8
id_number [9] [0] = 9
id_number [10] [0] = 10
id_number [11] [0] = 11

After the end of loop
id_number [5] [0] = 5     // why does this print work? didn't i delete the pointer "id_number 
                            // [5]" inside the loop??

After deleting the entries with删除条目后

delete[] id_number[i]

set the pointer you just deleted to a nullptr like this将刚刚删除的指针设置为这样的 nullptr

delete[] id_number[i]; id_number[i] = nullptr;

After deleting the alle the pointer in the arry you still have your array which occupies recources.删除数组中的所有指针后,您仍然拥有占用资源的数组。 therefore it also has to deleted因此它也必须删除

delete[] id_number; id_number = nullptr;

This should free all the resources correctly.这应该正确释放所有资源。 If you then as mentioned by WhozCraig try to acces deleted resources illegaly, undefiend behvoir will occure and my look like it does would it should which is again as mentioned by WhozCraig just undefiend behavoir.如果您然后如 WhozCraig 所述尝试非法访问已删除的资源,则会发生不安全行为,而我看起来确实应该这样做,正如 WhozCraig 再次提到的那样,只是不安全行为。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM