对于指针和数组,删除行为不同

时间:2016-11-16 16:43:00

标签: c++ arrays

我在修补旧学校阵列的同时偶然发现了这个问题。虽然有趣但是:

edittext1

考虑两种情况:

1。)

a[] = {1,2,3,4,5};
a[][] = {{1,2,3,4}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}}

2。)

void func(int *a) { //passing a 1D array
   a[1] = 100; //modified an element here
   delete a;  //This would have no effect on the array outside this function. 
}

问题是为什么? 在1.)指针应指向一个数组变量存储器因此,删除签名不会清除内存a [0]?

在2.)参数的签名和传递的变量完全匹配,因此删除确实会删除局部变量所拥有的内存吗?

这里有指针吗?

1 个答案:

答案 0 :(得分:0)

您在多个级别上调用未定义的行为。在数组上调用delete而不是delete[] ...并在未分配delete的对象上调用任何形式的new

你的程序可以做任何想做的事。