gpt4 book ai didi

c++ - 原始缓冲区的分配/损坏 - 如何继续调试?

转载 作者:行者123 更新时间:2023-11-28 00:24:56 25 4
gpt4 key购买 nike

我的代码中遇到了一个非常奇怪的错误。我必须分配一些原始缓冲区来连接 C 库。

我按以下方式执行此操作,其中 T 是实际使用类型的模板参数,主要是 double 或 int:

char * buffer = new char[size * sizeof(T)];

在大多数情况下,这是可行的,但至少在一台机器上,在不完全了解的情况下,内存似乎被破坏了。该程序不会崩溃,但底层的数值算法会导致略有不同和错误的结果。至少,我可以将问题追溯到上面给定的行并找到修复方法(我不太明白):

char * buffer = new char[size * sizeof(T) + 1];

有了这个,bug 就无法再重现,程序运行正常。

但在这一点上,我不知道下一步该做什么。

  • 当这个 + 1 有帮助时,可能是什么问题?
  • 接下来我应该调查什么?

该程序由 MPI 守护程序启动,因此我使用分析程序的能力有限。

最佳答案

尝试用 AddressSanitizer 编译程序.每次写入超出分配的缓冲区时,您都会收到错误消息。

关于c++ - 原始缓冲区的分配/损坏 - 如何继续调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com