[BUG] cuOptGetProblemStringArrayAttribute rejects a problem with no names instead of reporting it

未关闭
#1,796 1 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@aliceb-nv 已经在做这个了。

开始于 2026年8月25日。

评估

这个 Issue 还没有评估数据。

描述

Describe the bug

cuOptGetProblemStringArrayAttribute compares the stored name vector against the caller's count and fails if they differ:

const auto& names = (attribute == CUOPT_STRING_ARRAY_VARIABLE_NAMES) ? iface->get_variable_names()
                                                                     : iface->get_row_names();
if (names.size() != count) { return CUOPT_INVALID_ARGUMENT; }

A problem built without names — which is legal, and is what cuOptCreateProblem produces — stores an empty vector. A caller that sizes its buffer from cuOptGetNumVariables, as the documentation implies, therefore passes count = numVariables against names.size() == 0 and gets CUOPT_INVALID_ARGUMENT.

The caller cannot distinguish that from a genuine size mismatch, and there is no attribute reporting how many names are stored, so it cannot pre-check either.

Steps/Code to reproduce bug

  1. cuOptCreateProblem(...) with 2 variables and no names.
  2. cuOptGetProblemStringArrayAttribute(problem, CUOPT_STRING_ARRAY_VARIABLE_NAMES, 2, out).
  3. Returns CUOPT_INVALID_ARGUMENT rather than indicating that the problem has no names.

Expected behavior

"This problem has no names" should be reportable rather than indistinguishable from a caller error. Either return the generated default names so the count always matches numVariables, or add a count attribute the caller can query first, or define a distinct status for the empty case.

Additional context

Found while reviewing the Java bindings (#1524), where this is one of the reasons cuopt_jni.cpp still reads names through the internal header instead of the C API. Raised by @chris-maes in review: https://github.com/NVIDIA/cuopt/pull/1524#discussion_r3854928177

Related: #1703 covers the broader set of problem-model accessors the C API is missing.

主要语言
Cuda
星标
1.1k
派生
255
平均合并
1 天 11 小时
30 天内合并 PR
123

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

NVIDIA/cuopt 的其他 Issue

查看 NVIDIA/cuopt 的全部 Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。