我很久沒有使用過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