简单操作后 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);
我不明白为什么我的数组的简单操作会破坏堆。
例如,这段代码工作正常:
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);