修改:根据要求,我已将代码包含在' ledic'中。然而,它从未运行 - 任何一个,甚至不是一个hello world printf作为第一行,所以我相对肯定问题永远不会在内。
Edit2:具有讽刺意味的是, 在' ledic'功能。看起来我对此的理解比我之前想的要少。
我正在为我目前在Uni的项目写作,我周围没有人可以找出这个分段错误。它应该非常简单,所以我感谢你的帮助。
代码如下:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void ledic(FILE *fp){
printf("Hello world\n");
int len;
int j, i, k;
char palavra[30];
char dictionary[30][10000][30];
int VecOcorrencias[30];
for (j=0; j<30; j++)
VecOcorrencias[j]=0;
printf("Hello world\n");
while ( fscanf(fp, "%s", palavra) == 1 ) {
len = strlen(palavra);
k = VecOcorrencias[len];
strcpy (dictionary[len][k], palavra);
VecOcorrencias[len]++;
}
for (i=0; i<1000; i++)
printf("%s %d\n", dictionary[5][i], VecOcorrencias[5]);
}
}
FILE *OpenFile( char *nome, char *mode){
FILE *fp;
fp = fopen (nome, mode);
if( fp == NULL){
printf(" Cant open file\n");
exit(1);
}
return (fp);
}
int main( int argc, char *argv[]){
FILE * fp;
fp = OpenFile( argv[1], "r");
ledic(fp);
return(0);
}
代码在进入void ledic(FILE *fp)
函数时中断,并表示它无法访问引用的内存(我想* fp)。
我不能为我的生活找出原因。有什么想法吗?
答案 0 :(得分:3)
声明char dictionary[30][10000][30];
创建一个9Mb变量30 * 30 * 1000 = 9'000'000。由于它是一个局部变量,它在堆栈上创建,典型Linux机器上的默认堆栈大小仅为8Mb(在Windows上甚至只有1Mb)。
如果将其声明为static
,则该变量不在堆栈中,因此它可能比堆栈大小占用更多内存。
有关static
关键字的详细信息,请参阅this SO article。