在C++中使用malloc是否属于未定义行为?附代码示例求证
请问这段C++代码是否属于未定义行为?
... float *f = (float*)malloc(sizeof(float) * 3); if (f == NULL) { // handle error } f[0] = 1.0; f[1] = 2.0; f[2] = 3.0; ... // code using f[0] to f[2] ... ...
这段代码对于POD类型(如float、double、int等)来说,不属于未定义行为。
C++标准允许用malloc分配的内存存储POD类型对象:malloc返回的内存虽未初始化,但POD类型无需显式构造即可直接进行赋值操作,直接对这块内存中的POD对象赋值是合法的。
正如你所说,这种写法确实不规范,C中更推荐使用new[]或者std::vector<float>这类标准容器来管理动态内存,它们更适配C的对象模型,能避免手动管理内存带来的泄漏风险,也更符合C++的编码规范。
内容的提问来源于stack exchange,提问作者Jabberwocky
相关产品推荐
相关产品推荐

