(C) Сегментация Ошибка / Ошибка (11)?Как мне найти причину? - PullRequest
0 голосов
/ 16 октября 2018

Ошибки сегментации вызваны доступом к массивам за пределами?или это как-то связано с доступом к указателям?Я не думаю, что я достиг вне массива.Что бы это могло быть?

char *files[300][300];
char *rebuildFile[300];
int rebuildCount = 0;

void rebuildCheck(){
int i, j;

for(i=1; i<300; i++){
    char * target;
    time_t targetCreationDate = time(NULL);

    for(j=0; j<300; j++){
        if(j==0){
            target = files[i][j];
            char * targetPath = pathAppend(files[i][j]);
            targetCreationDate = getFileCreationTime(targetPath);
        }
        else if(files[i][j] == NULL){
            continue;
        }
        else{
            char * path = pathAppend(files[i][j]);
            time_t dependancyCreationDate = getFileCreationTime(path);
            if(difftime(dependancyCreationDate, targetCreationDate) > 0){
                rebuildFile[rebuildCount] = files[i][j];
                printf("rebuildFile[%i]: %s\n", rebuildCount, rebuildFile[rebuildCount]);
                ++rebuildCount;
            }
        }
    }
}
}

1 Ответ

0 голосов
/ 16 октября 2018

Переменная rebuildCount увеличивается во внутреннем цикле for, что означает, что она потенциально может возрасти до 300 * 300.

Тогда следующий оператор:

rebuildFile[rebuildCount] = files[i][j];

будетв конечном итоге доступ к памяти за пределами допустимого диапазона, поскольку rebuildFile содержит только 300 элементов.

...