我必须在这里失去理智。我在第for(i = 0; i < N; i++) {
行遇到了段错误。我从来没有遇到过这样的事情。这是完整的代码:
#include <stdio.h>
#include <time.h>
#define N 2400
#define M 2000
#define P 500
int main() {
int a[N][N];
int b[N][N];
int c[N][N];
int i, j;
// Initialize matrix A
for(i = 0; i < N; i++) {
for(j = 0; j < M; j++) {
a[i][j] = j-1+2;
}
}
// Initialize matrix B
for(i = 0; i < M; i++) {
for(j = 0; j < P; j++) {
b[i][j] = i-j+1;
}
}
}
答案 0 :(得分:1)
首先:你已经将a,b和c声明为[N] [N]矩阵,但是你将它们初始化为好像它们是[N] [M]和[M] [P]矩阵。考虑N> M> P,不应该导致段错误,但目的不明确。
其次,如果您将defines
替换为:
#define N 10
#define M 5
#define P 2
您的计划工作。这是因为局部变量a
和b
存储在堆栈中,并且堆栈的大小有限。请查阅您的编译器和系统文档,以确切了解所施加的限制。
为避免此类问题,请使用malloc
或等效函数分配内存,这样可以在堆上分配内存,但受限制较少。