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