如何在秤设置中调试内存覆盖

问题描述 投票:0回答:1

我遇到了分段错误,其中不是内存地址,而是复制了其他一些值,当该地址被取消引用时,就会发生核心转储。我做了一个代码演练,似乎没有什么不正确的地方,在正常情况下它不会被命中。这是比例设置。这是一个极端情况,并且不一致的问题。

我检查了原始内存转储,这看起来是一个有效的堆地址,用于保存它的变量的地址,并且值也是一个有效值。

您可以建议使用任何选项/工具来调试此问题吗? efence 或 valgrind 在这种情况下有用吗?任何其他工具或在 gdb 中我们可以做一些事情?复制也很困难。

为了更清楚起见,例如,我们有数据点,它应该存储某个变量的地址及其大小,该变量的类型是数据点,它存储来自 NODE 的两个值。

typedef struct node{
 uint32 valueA;
 uint8 valueB;
}NODE;
typedef struct datapoint{
     void* address;
     unsigned size;
}DP;
c segmentation-fault gdb heap-memory
1个回答
0
投票

这里的问题是我们有一个 dp 类型的数组,所以说我们在该数组中允许有大约 5 个成员,旁边是节点变量,在 add 方法中我们没有限制并允许添加第 6 个成员,这会覆盖 NODE当我们尝试访问节点时,它会导致核心,因为它具有 DP 类型的值。

struct problem_struct{
   DP array[5];
   NODE another_value;
}
© www.soinside.com 2019 - 2024. All rights reserved.