首页 文章

我的c程序默认是多线程还是stdout重新排序我的print语句?

提问于
浏览
1

我遇到了一个奇怪的问题 . 我写了一个简单的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 回答

  • 1

    看看如何调用增量值:

    void increment_value(int* hash, char key) {
       int value = get_value(hash, key); // calling get_value
       hash[get_index(key)] = ++value;
    }
    

    所以你在这里打印一个字符,然后在处理函数中再次调用get_value . 这就是为什么你在'1'之前获得字符的多次打印

相关问题