代码之家  ›  专栏  ›  技术社区  ›  Ahmad Mhaish

系统AccessViolationException:“试图读取或写入受保护的内存。(为c++库制作包装)

  •  0
  • Ahmad Mhaish  · 技术社区  · 7 年前

    我的构造函数是下一个

     ScaperEngine::ScaperEngine(GrabberType grabberType, bool timing) {
        switch (grabberType)
        {
        case GrabberType::DepthSenseGrabber:
            this->interface = new pcl::DepthSenseGrabber("");
            break;
        default:
            throw new std::exception("Grabber type wasn't chosen correctly");
            break;
        }
        executionPipeline = new ExecutionPipeline();
        executionPipeline->setTiming(timing);
    }
    

    然后我有一些代码,比如:

        void ScaperEngine::StartPipeline()
    {
        IPCLNormalCalculator* normalCalculator = new PCLNormalCalculator(normalCalcMaxDepthChangeFactor, normalSmoothingSize);
        executionPipeline->SetPCLNormalCalculator(normalCalculator);
    

    最奇怪的是,构造函数正在以正确的方式构建executionPipeline,将其放置在内存中的0x0000020ef385e830中,但当我的c#托管代码调用StartPipeline时,executionPipeline地址更改为0xCDCDCDCD,在快速观察中,以下文本显示其变量 <Unable to read memory> .

    谁知道发生了什么事?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   v1bri    7 年前

    这个 0xcdcdcdcdcdcdcdcd this StackOverflow question . 简而言之,您的C代码似乎正在调用 StartPipeline() 在无效对象上。例如,如果指针更改为指向堆内存中的随机位置,则可能会发生这种情况。使您的C代码(和运行时)正确存储指向 ScraperEngine 对象,而不是一路腐蚀它。