我正在阅读Use Python for Scientific Computing,并决定自己测试代码。所以 C++ 代码是(稍作修改)
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <cstring>
int main() {
std::clock_t begin = std::clock();
double a1[500][500];
double a2[500][500];
double a3[500][500];
memset(a1, 0, 500*500*sizeof(double));
memset(a2, 0, 500*500*sizeof(double));
memset(a3, 0, 500*500*sizeof(double));
int i, j, k;
for(i = 0; i < 500; i++) {
for(j = 0; j < 500; j++) {
for(k = 0; k < 500; k++) {
a3[i][j] += a1[i][k] * a2[k][j];
}
}
}
std::clock_t end = std::clock();
std::cout << (double)(end - begin) / (double)CLOCKS_PER_SEC<<std::endl;
return 0;
}
这是一个非常简单的代码,但奇怪的是根本没有生成任何输出。不是0,而是什么都没有。我尝试了 VC11 和 MinGW 4.7,但它们都没有产生任何结果。只有for
去掉里面的循环,这段代码才会产生输出,也就是0。
如果我在 VS 2012 中调试,则会抛出“堆栈溢出”异常,而如果不在调试模式下则不会发生错误。
这种奇怪行为的原因是什么?
编辑
所以我用new
了,这次有一个正常的输出0.83。
尽管如此,我还是觉得奇怪的是没有显示堆栈溢出错误,但程序只是退出而不给出输出。