C语言函数内访问全局变量输出结果与预期不符问题咨询
问题原因及修复方案
核心问题:全局变量赋值笔误
你在main函数中对测量边界变量赋值时出现了书写错误:
// 错误写法 max_meas = 20; max_meas = 5;
这里连续两次对max_meas赋值,第一次写入的20被后续的5覆盖,而你期望设为5的min_meas全程没有被手动赋值。C语言中未手动初始化的全局变量默认值为0,因此min_meas取值为0,和你遇到的输出结果完全吻合。
其他潜在问题
你代码中还存在内存分配参数不匹配的隐患,后续运行极易出现内存越界崩溃:
bin_counts是int类型数组,分配内存时误用了sizeof(float),需要修正为sizeof(int)bin_maxes对应bin_count个分桶的最大值,分配内存时误用了data_count作为元素个数,需要修正为bin_count
修正后的核心代码片段
// main函数内赋值修正 max_meas = 20; min_meas = 5; // 内存分配修正 data = (float *)malloc(data_count * sizeof(float)); bin_counts = (int *)malloc(bin_count * sizeof(int)); bin_maxes = (float *)malloc(bin_count * sizeof(float)); intermediateBinCounts = (int *)malloc(bin_count * thread_count * sizeof(int));
修正后调用generateData即可输出你预期的20.00000、5.00000。
内容的提问来源于stack exchange,提问作者Pravin Poudel
相关产品推荐
相关产品推荐

