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

使用Google.OrTools.Sat的CpSolver.Solve触发AccessViolationException

问题描述

我正在跟随一个Python教程视频将代码转成.NET版本,但程序一运行就崩溃。精简出最小复现代码后问题仍存在,尝试用GC.KeepAlive也无法阻止崩溃。请问是否有遗漏的配置?

复现代码(program.cs)

using Google.OrTools.Sat; // 版本9.10.4067

var model = new CpModel();
var solver = new CpSolver();
solver.Solve(model);

// 尝试阻止崩溃
GC.KeepAlive(model);
GC.KeepAlive(solver);

错误输出

%USER_PROFILE%\AppData\Local\Programs\Rider\plugins\dpa\DotFiles\JetBrains.DPA.Runner.exe --handle=14376 --backend-pid=6556 --etw-collect-flags=67108622 --detach-event-name=dpa.detach.14376 %LOCAL_PATH%/ConsoleApp1/bin/Debug/net7.0/ConsoleApp1.exe
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Repeat 2 times:
--------------------------------
   at Google.OrTools.Sat.operations_research_satPINVOKE.SolveWrapper_Solve(System.Runtime.InteropServices.HandleRef, Int32, Byte[])
--------------------------------
   at Google.OrTools.Sat.SolveWrapper.Solve(Google.OrTools.Sat.CpModelProto)
   at Google.OrTools.Sat.CpSolver.Solve(Google.OrTools.Sat.CpModel, Google.OrTools.Sat.SolutionCallback)
   at Program.<Main>$(System.String[])

Process finished with exit code 0xC0000005.

项目文件

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net7.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
      <PackageReference Include="Google.OrTools" Version="9.10.4067" />
    </ItemGroup>
</Project>
解决方案

针对这个崩溃问题,可以尝试以下几个排查和修复步骤:

  • 给模型添加至少一个变量或约束:空模型会触发底层C++库的未定义行为,导致内存访问错误。添加简单的变量和约束即可避免,示例代码:

    using Google.OrTools.Sat;
    
    var model = new CpModel();
    // 添加变量和约束
    var x = model.NewIntVar(0, 10, "x");
    model.Add(x > 5);
    
    var solver = new CpSolver();
    solver.Solve(model);
    
  • 设置正确的平台目标:Google OR-Tools主要支持x64架构,确保项目生成选项里的平台目标设置为x64,避免使用Any CPU导致的跨平台兼容问题。

  • 升级OR-Tools版本:尝试更新Google.OrTools NuGet包到最新版本,新版本可能修复了空模型导致的崩溃bug。

  • 避开Rider的DPA工具启动:错误输出显示程序是通过JetBrains DPA性能分析工具启动的,该工具可能与OR-Tools的原生库存在交互冲突。直接运行输出目录下的ConsoleApp1.exe,而非通过Rider的DPA工具启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:40