简单操作后 C++ 堆损坏

C++ Heap corruption after simple action

我不明白为什么我的数组的简单操作会破坏堆。

例如,这段代码工作正常:

double *matrix = (double*)(malloc(50));

free(matrix);

然后,我尝试像这样修改这个数组的一些元素:

double *matrix = (double*)(malloc(50));

for (int i = 0; i < 20; matrix++, i++) {
    *matrix = (double)i;
}

free(matrix);

问题是即使这段代码也根本不起作用。 (VS 告诉我堆已损坏)。可能这是一个愚蠢的错误,但我对所有这些带有指针的操作都是陌生的。

更新

现在我的代码如下所示:

double *matrix = (double*)malloc(sizeof(double) * 50);

但我收到此错误消息:

你的 malloc 所做的是分配 50 个字节,而不是 50 个 double。以下是如何使用 malloc 的示例:

myVar = (double*)malloc (sizeof(double));

或者如果你想使用多个(数组)double 那么你可以这样做:

myVar = (double*)malloc (sizeof(double) * 50);

您的代码在您释放它之前修改了指针 "matrix",我认为这是未定义的行为。

无意冒犯,但我建议你读一本关于 C++ 的好书。 "malloc" 不是 c++ 中动态内存分配的首选方式。

无论如何,如果您想以数组的形式访问内存块,最好的方法是使用 operator[]:

for (int i = 0; i < 20; i++) {
    matrix[i] = (double)i;
} 

是的,正如@Hernantas 提到的,如果您想为 50 个双精度对象分配 space,请使用

myVar = malloc (sizeof(double) * 50);