Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“分配”时会发生什么情况;“新[]”;并删去以“just”取代的字句;删除“; P>好的,所以我在C++中做了一些实验,因为我已经在将近一年半的时间里开始重新编码了。所以,如果你觉得这很幼稚,请原谅我,我只是在生锈_C++_Pointers_Malloc_New Operator - Fatal编程技术网

使用“分配”时会发生什么情况;“新[]”;并删去以“just”取代的字句;删除“; P>好的,所以我在C++中做了一些实验,因为我已经在将近一年半的时间里开始重新编码了。所以,如果你觉得这很幼稚,请原谅我,我只是在生锈

使用“分配”时会发生什么情况;“新[]”;并删去以“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

不管怎么说,我在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 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要直接回答您的问题,是的,它是特定于编译器的。它也可能是特定于日期的,天气规范或者编译器甚至可以发出使用启动代码炸毁外国的代码。所有这些都不比另一个更有效或无效。这就是未定义的行为。