我无法理解为什么使用我的数组的简单操作会破坏堆。
例如,此代码可以正常工作:
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);
但我收到此错误消息:
答案 0 :(得分:2)
你的malloc做了什么被分配50个字节,而不是50个双倍。以下是如何使用malloc的示例:
myVar = (double*)malloc (sizeof(double));
或者如果你想使用double(array)double,那么你可以这样做:
myVar = (double*)malloc (sizeof(double) * 50);
答案 1 :(得分:2)
您的代码修改了指针&#34;矩阵&#34;在你释放它之前,我认为这是一种未定义的行为。
没有冒犯,但我建议你得到一本关于c ++的好书。 &#34;的malloc&#34;不是c ++中动态内存分配的首选方式。
无论如何,如果你想作为一个数组访问内存块,最好的方法是使用operator []:
for (int i = 0; i < 20; i++) {
matrix[i] = (double)i;
}
是的,正如@Hernantas所提到的,如果你想为50个双重对象分配空间,请使用
myVar = malloc (sizeof(double) * 50);