删除动态数组时会发生什么?

时间:2017-03-01 19:24:05

标签: c++ arrays pointers dynamic

我制作了一个动态数组(例子):

vector<int*> pa;
pa.push_back(&a[0]);

比我创建一个存储指针的向量:

@Bean
@ConditionalOnBean(value = SalesforceClientConfig.class)
SalesforceClient sfClient(SalesforceClientConfig sfConfig){
    return SalesforceRestClient.from(sfConfig);
}

@Bean
//@ConditionalOnBean(value = Authentication.class)
SalesforceClientConfig sfClientConfig(Authentication sfAuthentication){
    return DefaultSalesforceClientConfig.builder()
                                        .authentication(sfAuthentication)
                                        .mapper(mapper())
                                        .build();
}

删除(释放)内存&#34;删除[] a;&#34;后,我仍然可以访问该元素,即push_backed。 (cout&lt;&lt; * pa [0];输出:10)

为什么会这样?当我&#34;删除[] a&#34;时,它只删除指向元素的指针,但元素仍可访问?

1 个答案:

答案 0 :(得分:1)

关于delete []如何工作的陈述是倒退的。它删除元素但不删除指针。在删除其内容后继续使用指针,正如您所做的那样,是未定义的行为。这意味着如果你这样做,任何事情都会被允许发生,所以你不应该这样做。幸运的是,你现在仍然可以访问这些元素,如果你这样做,将来会发生不好的事情。