You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言memset初始化结构体数组后赋值不生效问题求解

异常根本原因

你打印数组内容时使用的索引和实际完成赋值的索引不一致:

  • 赋值阶段操作的是 prob_values[prob_count](此时prob_count还未自增)
  • 赋值完成后先执行了prob_count++,再调用printf打印时,访问的是prob_values[prob_count],也就是未赋值的下一个数组元素
    未初始化时这块内存是随机值,memset后是全0,自然会出现赋值未生效的错觉,本身赋值逻辑是正常执行的。
修复方案

调整自增和打印的顺序即可,修改后代码示例:

int prob_count = 0;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        printf("%d, %d, ", prob_count, prob_values[prob_count].index);
        prob_values[prob_count].index = (int) prob_count;
        prob_values[prob_count].probability = (float) pow((1.0 - p_x_error), n - i) * pow((1.0 - p_z_error), num_data_qubits - j) * pow(p_x_error, i) * pow(p_z_error, j);
        prob_values[prob_count].count = (unsigned long) pascal_triangle[n][i+j];
        // 先打印已赋值的元素,再自增索引
        printf("At index %d: prob: %e, count: %lu\n", prob_values[prob_count].index, prob_values[prob_count].probability, prob_values[prob_count].count);
        prob_count++;
    }
}
额外优化建议
  • 不要用pow(n,2)计算数组长度,pow是浮点数运算存在精度误差风险,直接写n*n即可
  • 当前使用的是C可变长度数组,若n数值较大时容易出现栈溢出,建议改用malloc动态分配数组内存更稳妥。

内容的提问来源于stack exchange,提问作者Mav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:06:05