我遇到了一个奇怪的问题 . 我写了一个简单的c程序(两个源文件,相关部分如下所示) . 当我运行程序(a.c具有主函数)时,我得到输出(因为我调用“process”的次数很高,我打印输出到屏幕的最后几个打印输出):
关键:'Q'
关键:'A'
1
关键:'A'
关键:'A'
1
关键:'A'
键:'A'
1
关键:'A'
关键:'A'
关键:'C'
分段故障(核心转储)
a.c
void process(int * hash,char * input,int number_of_ac){
int值,i = 0;
for(; i <number_of_ac; i){
value = get_value(hash,input [i]);
printf("1\n");
increment_value(hash,input [i]);
}
}
b.c
int get_value(int * hash,char key){
printf("key: '%c'\n",key);
return hash [get_index(key)];
}
void increment_value(int * hash,char key){
int value = get_value(hash,key);
hash [get_index(key)] = value;
}
我的问题具体是(最终的目标是让我尝试调试为什么我在大量“进程”调用而不是少量调用时遇到分段错误),我不应该看到像这个:
关键:'Q'
1
关键:'A'
1
关键:'A'
1
关键:'A'
等等
为什么在再次看到1之前我看到两个字母的印刷品?这是我的陈述的缓冲重新排序问题被打印到屏幕上吗?或者,是不是我的c程序在场景背后是多线程?
顺便说一句,这个完全相同的程序在我的笔记本电脑上运行,输入的输入数量较多:
Linux ubuntu 3.8.0-25-generic#37-Ubuntu SMP Thu Jun 6 20:47:07 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux
但它在上面的分段故障中打破了另一台机器上的小得多的输入:
Linux x.y.z 2.6.32-279.19.1.el6.cny6.7068.x86_64#1 SMP Mon Mar 11 08:59:43 CDT 2013 x86_64 x86_64 x86_64 GNU / Linux
有任何想法吗?感谢您的协助!
1 回答
看看如何调用增量值:
所以你在这里打印一个字符,然后在处理函数中再次调用get_value . 这就是为什么你在'1'之前获得字符的多次打印