我很久没有使用过C++,而且我似乎正在做出我确信是一个非常愚蠢的错误。有人能告诉我为什么制造一个愚蠢的记忆错误
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
double* atoms;
atoms = (double*)malloc(10 * 3*sizeof(double));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
atoms[i*10 + j] = 2.0;
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
cout << atoms[i*10 + j] << endl;
}
cout << endl;
}
free(atoms);
return 0;
}
是印刷
2
2
2
2
2
2
2
2
2
6.94528e-310
6.94528e-310
0
0
4.24399e-314
4.24399e-314
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
而不是所有2的?由于
您是否使用调试器?请注意,在第二个循环中,“i”可以是9,然后您正在处理索引90的元素,该元素溢出“malloc”区域。 –
只需使用向量的'std :: vector'并保存自己的困惑。 –
此外,允许malloc返回NULL。 – SecurityMatt