【发布时间】:2019-03-20 20:39:41
【问题描述】:
访问数组越界是否会导致分段错误?还是与访问指针有关?我不认为我已经到达阵列之外。会是什么?
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;
}
}
}
}
}
【问题讨论】:
-
我认为我没有到达数组之外...你为什么不通过添加一些代码来检查呢?还可以考虑使用一个调试器,它会告诉你究竟在哪里发生了段错误。
-
你如何/在哪里初始化
files的所有元素? -
您需要edit您的问题并向我们展示
pathAppend功能。问题可能出在那里。pathAppend返回一个指向字符串的指针,这里很多事情都可能出错。但是没有看到那个代码,没有人能说出来。你也没有告诉我们files是如何初始化的,很多事情也可能出错,也许其中一个字符指针是NULL,这可以解释分段错误 -
@Jabberwocky 谢谢!是的,确实,pathAppend 返回了一个 NULL 字符指针值,所以它弄乱了代码。
-
@NickWalters 仍然edit 你的问题并显示功能,可能还有其他你不知道的问题。
标签: c pointers memory segmentation-fault