Я перечислил код ниже. Если я определяю ARR_SIZE
слишком много (например, 820), я получаю ошибка сегментации ошибка. Но если ARR_SIZE
не такой большой (например, 320), код работает.
GDB показывает ошибку только в int main()
.
Я думаю, что проблема в фазе инициализации во время двухмерных массивов, но не уверен.
#include "stdio.h"
#include "time.h"
#include "stdint.h"
#define ARR_SIZE 820
#define TICK(X) clock_t X = clock()
#define TOCK(X) printf("time %s: %g sec.\n", (#X), (double)(clock() - (X)) / CLOCKS_PER_SEC)
void copyji(int src[ARR_SIZE][ARR_SIZE], int dst[ARR_SIZE][ARR_SIZE]){
int i, j;
for (j = 0; j < ARR_SIZE; j++)
for (i = 0; i < ARR_SIZE; i++)
dst[i][j] = src[i][j];
}
void copyij(int src[ARR_SIZE][ARR_SIZE], int dst[ARR_SIZE][ARR_SIZE]){
int i, j;
for (i = 0; i < ARR_SIZE; i++)
for (j = 0; j < ARR_SIZE; j++)
dst[i][j] = src[i][j];
}
int main(){
int srcArr1[ARR_SIZE][ARR_SIZE];
int srcArr2[ARR_SIZE][ARR_SIZE];
int dstArr1[ARR_SIZE][ARR_SIZE];
int dstArr2[ARR_SIZE][ARR_SIZE];
int i, j;
for (i = 0; i < ARR_SIZE; i++)
for (j = 0; j < ARR_SIZE; j++){
srcArr1[i][j] = i - j;
srcArr2[i][j] = j - i;
}
TICK(TIME_JI);
copyji(srcArr1, dstArr1);
TOCK(TIME_JI);
TICK(TIME_IJ);
copyij(srcArr2, dstArr2);
TOCK(TIME_IJ);
return 1;
}