gpt4 book ai didi

c - C/Pro*C 中的堆一致性错误

转载 作者:行者123 更新时间:2023-11-30 15:57:48 25 4
gpt4 key购买 nike

我有以下代码,在我的开发环境中运行良好,但是当代码移动到生产服务器时,它会给出oracle“堆一致性错误”。您能让我知道如何调试这个问题以及原因吗?

if (TagValue[TagTable[TagLoc].Ptr2ValueTable].repetitionOutValue.length==-1)
{
TagValue[TagTable[TagLoc].Ptr2ValueTable].repetitionOutValue.value
= (char*) malloc (*CurLen+1) ;
}
else
{
more_val2 = (char*) realloc (TagValue[TagTable[TagLoc].Ptr2ValueTable].repetitionOutValue.value
, (strlen(TagValue[TagTable[TagLoc].Ptr2ValueTable].repetitionOutValue.value)+(*CurLen)) * sizeof(char));

if (more_val2!=NULL)
{
TagValue[TagTable[TagLoc].Ptr2ValueTable].repetitionOutValue.value=more_val2;
}
}

最佳答案

使用 Valgrind 检查程序。

oracle对于这个实现定义状态:

Code    Condition               Oracle Error82111   heap consistency error  SQL-02111
  • Heap consistency error

  • This internal error typically indicates a memory-related error.

  • Check the program for memory-related errors, such as invalid pointers or array-bounds violations.

不过;如果这是一个从未通过任何检查运行的庞大代码 - 我不羡慕你前面的任务。

这里的是为动态变量保留的内存区域。

过多的堆验证也是 ORAHCHF 启用的运行时选项。如果设置,则告诉 Oracle 运行时库在预编译器每次动态分配或释放内存时检查堆的一致性。

必须在CONNECT之前设置,并且一旦设置,就无法清除。默认为 0/关闭。

您还对 malloc 进行了冗余转换。也许您在开发与生产环境产生影响的其他地方进行了转换等。 IE。 32 位与 64 位。

  • malloc 上,您 malloc CurLen + 1
  • 在您的realloc上,您没有添加额外的1(对于'\0'?)。

这是否是一个问题取决于您之后如何处理 repetitionOut.value

strlen() 不计算终止 \0

关于c - C/Pro*C 中的堆一致性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231606/

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