Tom*_*Tom -3 c++ windows malloc memory-leaks large-data
正如你所看到的,当我运行它时,我遇到了内存访问错误。但是如果我将 malloc_size 更改为 100,它就可以工作。如何在不更改 malloc_size 的情况下修复它。
int malloc_size = 900000;
float* ptr = (float *)malloc(malloc_size);
for (int i = 0; i< malloc_size; i ++) {
ptr[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)
malloc接受要分配的字节数作为参数。malloc_size为了简单起见,假设您的值为 100。
for 循环迭代 whilei < malloc_size可能会超出该限制,因为在内部,您正在访问ptr[i] = 0;. ptr是一个指向 a 的指针float,它很可能有四个字节大。这意味着访问偏移量或 处的ptr[i]字节。当达到 25 时,您将访问 offset 处的字节,即超出末尾的字节。i * sizeof(float)i * 4i25 * 4 = 100
越界访问数组是未定义的行为,在您的情况下,它会导致程序崩溃。
由于这个问题被标记为c++malloc ,我也建议根本不要使用。一个更好的选择是new:
float* ptr = new float[100] {}; // array of size 100
// all elements are initialized to zero
// ...
delete[] ptr;
Run Code Online (Sandbox Code Playgroud)
您仍然需要使用new和手动管理内存delete,因此使用它会更容易std::vector:
#include <vector>
// ...
std::vector<float> vec(100); // vector of size 100
// all elements are initialized to zero
// no need to free/delete
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |