c-Malloc在为int分配空间时表现得很奇怪



可能我只是不了解malloc是如何工作的,但我的代码没有出现错误:

int amount_integers = 2;
int *pointer_to_allocated_memory = (int*)malloc(amount_integers * sizeof(int));
for (int i = 0; i < amount_integers; i++)
{
    int *address = &(pointer_to_allocated_memory)[i * sizeof(int)];
    *(address) = 0;
}

我想为任意数量的整数初始化内存(amount_integers可能不是2)。然而,第2行中的malloc似乎运行不正常。MSVC的调试器将在此时中断(没有定义断点)。当继续时,当i为1时,它将在第6行(*(address) = 0;)遇到访问写入冲突。

我认为我正在访问的内容:

    v pointer_to_allocated_memory[0 * sizeof(int)]
... | sizeof(int) | sizeof(int) | 
                  ^ pointer_to_allocated_memory[1 * sizeof(int)]

这些应该分配。为什么应用程序会崩溃?

数组索引不是索引字节,而是索引数组元素,在您的情况下是int:

       int *address = &(pointer_to_allocated_memory)[i];

i的有效值为0和1

因为您误解了指针算术的工作原理。它不处理字节,而是处理sizeof(T)字节的内存块,t是指针的指针类型。所以

int *address = &(pointer_to_allocated_memory)[i * sizeof(int)];

应该是

int *address = &ptr[i];

相反。(还要注意没有多余的括号和更简单的名称…)

顺便说一句,铸造malloc是有害的。

相关内容

  • 没有找到相关文章

最新更新