diff --git a/ccsrc/lib/simulator/densitymatrix/detail/cpu_common/cpu_densitymatrix_core_policy.cpp b/ccsrc/lib/simulator/densitymatrix/detail/cpu_common/cpu_densitymatrix_core_policy.cpp index 99d97e46ea1f310cf825060556f10931f787b0bd..32b9dd691a54b4ac08b2912eb118939c049c9c77 100644 --- a/ccsrc/lib/simulator/densitymatrix/detail/cpu_common/cpu_densitymatrix_core_policy.cpp +++ b/ccsrc/lib/simulator/densitymatrix/detail/cpu_common/cpu_densitymatrix_core_policy.cpp @@ -181,12 +181,12 @@ template void CPUDensityMatrixPolicyBase::CopyQS(qs_data_p_t* qs_des, const qs_data_p_t& qs_src, index_t dim) { auto& qs = *qs_des; - if (qs == nullptr) { - qs = derived::InitState(dim); - } if (qs_src == nullptr) { - qs[0] = 1.0; + FreeState(&qs); } else { + if (qs == nullptr) { + qs = derived::InitState(dim); + } THRESHOLD_OMP_FOR( dim, DimTh, for (omp::idx_t i = 0; i < static_cast((dim * dim + dim) / 2); i++) { qs[i] = qs_src[i]; })