我遇到了一个奇怪的问题。我写了一个简单的 C 程序(两个源文件,相关部分如下所示)。当我运行程序(ac 具有该main
功能)时,我得到了输出(因为我调用的次数process
很高,所以我正在将最后几个打印输出从输出打印到屏幕):
key: 'Q'
key: 'A'
1
key: 'A'
key: 'A'
1
key: 'A'
key: 'A'
1
key: 'A'
key: 'A'
key: 'C'
Segmentation fault (core dumped)
交流
void process(int* hash, char* input, int number_of_ac) {
int value, i = 0;
for(; i < number_of_ac; i++) {
value = get_value(hash, input[i]);
printf("1\n");
increment_value(hash, input[i]);
}
}
公元前
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;
}
我的问题具体是(我的最终目标是尝试调试为什么我在大量process
调用而不是在少量调用时出现分段错误),我不应该看到这样的打印输出:
key: 'Q'
1
key: 'A'
1
key: 'A'
1
key: 'A'
etc.
为什么我在再次看到 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 xyz 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
有任何想法吗?感谢您的帮助!