使用“分配”时会发生什么情况;“新[]”;并删去以“just”取代的字句;删除“; P>好的,所以我在C++中做了一些实验,因为我已经在将近一年半的时间里开始重新编码了。所以,如果你觉得这很幼稚,请原谅我,我只是在生锈
不管怎么说,我在VS2019中玩指针,我注意到一些东西开始困扰我 这是我写的代码:使用“分配”时会发生什么情况;“新[]”;并删去以“just”取代的字句;删除“; P>好的,所以我在C++中做了一些实验,因为我已经在将近一年半的时间里开始重新编码了。所以,如果你觉得这很幼稚,请原谅我,我只是在生锈,c++,pointers,malloc,new-operator,C++,Pointers,Malloc,New Operator,不管怎么说,我在VS2019中玩指针,我注意到一些东西开始困扰我 这是我写的代码: #include <iostream> int main() { int* i = new int[4]; *i = 323; *(i + 1) = 453; std::cout << *i << std::endl; std::cout << *(i + 1) << std::endl; delete
#include <iostream>
int main() {
int* i = new int[4];
*i = 323;
*(i + 1) = 453;
std::cout << *i << std::endl;
std::cout << *(i + 1) << std::endl;
delete i;
}
#包括
int main(){
int*i=新的int[4];
*i=323;
*(i+1)=453;
标准::cout
使用“new[]”分配和仅使用“delete”删除时会发生什么情况
程序的行为未定义
现在我希望它会造成一些记忆上的问题
您的期望是错误的。未定义的行为不能保证内存中发生意外或其他情况。程序的行为没有任何保证
我是说如果这就是它的工作原理
这就是你观察它“工作”的方式。这并不意味着它一定会一直这样工作。欢迎使用未定义的行为。int main(){int*i=new int[4];*i=323;*(i+1)=453;std::cout在我的机器上崩溃。由于未定义的行为,我所看到的和您所看到的都是合理的结果。在两者之间,我认为我得到了更好的行为。好的,所以我在clang上测试了代码,它刚刚删除了数组中的第一个整数,其余的都未被触及发生的是未定义的。我们的老朋友。任何事情都是未知的allowed-该程序完全无效。好吧,我在clang上测试了它,它只是删除了数组中的第一个元素(应该如此),那么这个行为是编译器特有的吗?(应该如此)
程序没有“应该”的行为当行为未定义时具有。那么此行为是特定于编译器的吗?
任何东西都可能影响未定义的行为。这包括编译器、操作系统、CPU、月相和您的邻居。此外,即使在完全相同的条件下,行为也可能不同。@mitesh它未定义,这意味着编译器可以做什么任何他们想要的。行为可能会在不同的编译器版本之间发生变化,只需使用不同的编译器标志就可以改变。它可能会在相同的编译器版本中使用相同的标志,但在不同的体系结构/操作系统等上发生变化。@mitesh要直接回答您的问题,是的,它是特定于编译器的。它也可能是特定于日期的,天气规范或者编译器甚至可以发出使用启动代码炸毁外国的代码。所有这些都不比另一个更有效或无效。这就是未定义的行为。