gpt4 book ai didi

c++ - 使用 malloc 安全吗?

转载 作者:可可西里 更新时间:2023-11-01 16:52:23 33 4
gpt4 key购买 nike

有人告诉我使用 malloc 进行分配不再安全,我不是 C/C++ 高手,但我已经使用 malloc 和 C/C++ 做了一些东西。有谁知道我面临的风险是什么?

引用他的话:

[..] But indeed the weak point of C/C++ it is the security, and the Achilles' heel is indeed malloc and the abuse of pointers. C/C++ it is a well known insecure language. [..] There would be few apps in what I would not recommend to continue programming with C++."

最佳答案

C++ 的 new 可能确实比 malloc() 更安全,但这不会自动生成 malloc() 比以前更不安全。你的 friend 有没有说为什么他认为它不安全?


不过,这里有几点你应该注意:

1) 在 C++ 中,使用 malloc()/free()new/delete 在同一程序中并排。这是可能且允许的,但是使用 malloc() 分配的所有内容都必须使用 free() 释放,而不是使用 delete。同样,所有用new 分配的东西都必须用delete 释放,而不能用free() 释放。 (这个逻辑更进一步:如果你用 new[] 分配一个数组,你必须用 delete[] 释放它,而不仅仅是用 delete。)始终使用相应的对象进行分配和释放,每个对象。

int* ni = new int;
free(ni); // ERROR: don't do this!
delete ni; // OK

int* mi = (int*)malloc(sizeof(int));
delete mi; // ERROR!
free(mi); // OK

2) malloc()new(再次谈到 C++)做的事情并不完全相同。 malloc() 只是给你一 block 内存使用; new 将另外调用构造函数(如果可用)。同样,delete 将调用析构函数(如果可用),而 free() 则不会。这可能会导致问题,例如对象初始化不正确(因为未调用构造函数)或未释放资源(因为未调用析构函数)。

3) C++ 的 new 还负责为指定的类型分配正确数量的内存,而您需要自己计算使用 malloc():

int *ni = new int;
int *mi = (int*)malloc(sizeof(int)); // required amount of memory must be
// explicitly specified!
// (in some situations, you can make this
// a little safer against code changes by
// writing sizeof(*mi) instead.)

结论:

在 C++ 中,new/delete 应尽可能优先于 malloc()/free() . (在 C 中,new/delete 不可用,因此选择很明显。)

关于c++ - 使用 malloc 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840940/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com