gpt4 book ai didi

c - 我的 C 程序默认是多线程的,还是 stdout 重新排序我的打印语句?

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:35 26 4
gpt4 key购买 nike

我遇到了一个奇怪的问题。我写了一个简单的 C 程序(两个源文件,相关部分如下所示)。当我运行程序时(a.c 有 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]);
}
}

BC

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 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

有什么想法吗?感谢您的帮助!

最佳答案

看你怎么调用增量值:

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

所以你在这里打印一个字符,然后在过程函数中再次调用 get_value。这就是为什么你在 '1' 之前得到多个字符打印

关于c - 我的 C 程序默认是多线程的,还是 stdout 重新排序我的打印语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com