c++ - 在 C++ 中使用一些 C 代码并出现访问冲突错误

标签 c++ c++builder

<分区>


关闭 3 年前

我正在尝试在 C++ Builder 社区版中使用以下来自 sflowtool.c 的代码,但收到访问冲突。

uint32_t TForm3::getData32_nobswap(SFSample *sample)
{
    uint32_t ans = *(sample->datap)++; // HERE I GET THE ERROR

  if((uint8_t *)sample->datap > sample->endp) {
    SFABORT(sample, SF_ABORT_EOS);
  }
  return ans;

在 &sample 传递给上面的函数之前,它有这个

    SFSample sample;
    memset(&sample, 0, sizeof(sample))
    sample.rawSample = (uint8_t *) AData[0];
    sample.datap = (uint32_t *) sample.rawSample;
    sample.endp = (uint8_t *) sample.rawSample + sample.rawSampleLen;
    sample.datagramVersion = getData32(&sample);

其中 AData 的类型为“const TIdBytes AData”

任何人都可以给我一些指示来理解原因吗?与 C 相比,C++ 处理上述代码有什么不同吗?

最佳答案

你的意思是:

sample.rawSample = (uint8_t *) &AData[0];

注意附加的 &。这意味着您将 rawSample 设置为 AData 数组中第一个元素的地址,而不是将 AData 视为指针数组并采用它的第一个指针。

关于c++ - 在 C++ 中使用一些 C 代码并出现访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59685870/

上一篇:c++ - 无法将模板子类转换为不同的模板实例

下一篇:c++ - 为什么即使链接了适当的 .lib,此 C++ 项目仍无法构建?

相关文章:

c++ - "PROCESSENTRY32W *"类型的参数与 "LPPROCESSENTRY32"类型的参数不兼容

c++ - 这种使用 std::make_unique 会导致非唯一指针吗?

delphi - 如何设置表单高度大于1096像素?

C++ Borland Builder 表单 - 调用函数

delphi - 如何在 Delphi 2006 或更早版本的可执行文件上启用 DEP/NX 和 ASLR?

c++ - 奇怪的 C++ 模板问题

c++ - 如何在 C++ 的 Xcode 4 中从控制台获取输入

c++ - (FFMPEG) avformat_write_header 崩溃 (MSVC2013) (C++) (Qt)

c++ - 使用 OLE 以编程方式保存 Excel 文件

c++ - 在 C++ Builder 2010 上包含 boost/asio.hpp 时出现编译器错误