debug相关
文章平均质量分 60
bug记录
大磕学家ZYX
这个作者很懒,什么都没留下…
展开
-
python踩坑:python引用和c++的区别
另一种方式是使用可变对象,如列表,将值存储在列表中,并将列表传递给函数。因为列表是可变的,所以可以在函数内部修改列表的元素,会影响到原始列表。int类型这种不可变对象,在python中类似值传递,所以函数里面修改了值,函数外面还是不变的,就会和想象的不一样。记录一个python的坑,调试的时候发现打印出来的变量和自己想象中的值不太一样,发现是Python引用的问题。,赋值和传参将导致新创建对象,这和C++的引用行为是不同的。,赋值和传参,和C++引用的行为一致,是真正的。在 Python 中,原创 2023-12-11 15:24:12 · 183 阅读 · 0 评论 -
Line 171: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebec0ba for typ
leetcode 503.下一个更大元素Ⅱ报错代码:错误信息的意思是:运行时发生了一种未定义行为(Undefined Behavior)。具体来说,它在尝试对一个非对齐的地址(即不是4字节对齐的地址)进行整数的引用绑定,而这个操作是未定义的。该错误通常发生在空指针解引用,数组越界等情况。这个错误出现在while循环这一句:while 循环如果这么写,那么,在检查栈是否为空之前,就已经尝试从栈顶取值,这是有问题的。当栈为空时,这将会导致未定义行为。非空操作的判定必须写在前面,才能防止栈顶已经为空的时候出原创 2023-08-02 20:46:42 · 584 阅读 · 0 评论 -
Line 15: Char 5: error: non-void function does not return a value in all control paths [-Werror,-Wre
这个错误出现在lengthOfLIS函数中。在for循环内部使用了return语句,导致只有在for循环第一次迭代时才会返回值,如果for循环没有执行,那么函数就不会有返回值。,这在C++中是不允许的。每个非void函数都必须在所有可能的执行路径下都有返回值。return res位置移动到外面就好了。原创 2023-07-25 20:09:07 · 1121 阅读 · 0 评论 -
debug记录:解答错误并出现较大数字
得到的 1094795590 这个很大的数字,原创 2023-07-24 19:21:18 · 101 阅读 · 0 评论 -
debug记录:三目运算符优先级的问题
leetcode 188.买卖股票最佳时机Ⅳ错误代码:出现了解答错误:这段代码查了很久也没有查出问题,最后发现问题出在整个三目运算符的大括号上。在 C++、Java、JavaScript 等语言中,三元运算符 ? : 的优先级低于加法和减法。也就是说先执行加减运算,最后才执行三目运算符!原代码:这种情况下,三元运算符并没有正确地应用在 prices[i] 和 -prices[i] 上,而是应用在了 dp[i - 1][j - 1] + (j % 2 == 0) 和 prices[i] 之间,因为加法操原创 2023-07-24 19:15:15 · 150 阅读 · 0 评论 -
Line 1034: Char 34: runtime error: applying non-zero offset 4 to null pointer (stl_vector.h)
当创建一个大小为 n+1 的 std::vector 时,每个元素都会被初始化为 int 的默认值,即 0。时就指定它的大小,才能保证有足够的空间来存储元素。在C++中, std::vector。原创 2023-07-10 21:28:01 · 3390 阅读 · 0 评论 -
ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000000090 at pc 0x00000034d628 bp 0x7f
所以在sum+=nums[i];这里,实际上访问的是数组的第i个元素,而不是当前元素。当i的值大于nums的长度时,就会发生访问越界,导致。的问题,这通常是由于。原创 2023-07-04 15:37:19 · 2183 阅读 · 0 评论 -
Char 34: runtime error: addition of unsigned offset to 0x603000000070 overflowed to 0x60300000006c
在大多数情况下,这种类型的错误信息表示尝试访问了数组的某个位置,而这个位置不在数组的有效范围内,也就是说,你的代码试图进行越界访问。当试图访问未初始化的数组元素或者超出数组范围的下标时,都可能发生这种错误。具体来看这是一个运行时错误,它表示在执行到文件中的某一行时,发生了溢出。具体来说,这是一个无符号整数溢出错误,说明程序尝试将一个正值(无符号偏移)加到一个地址上,但结果却比原地址小,这表明发生了溢出。一般情况下,这可能是由于在访问vector的元素时使用了负索引,而在C++中,vector。原创 2023-06-25 21:02:41 · 5304 阅读 · 0 评论 -
Char 9: runtime error: reference binding to null pointer of type ‘int‘ (stl_vector.h)
int类型的空指针指的就是used数组为空。"int类型的空指针"是指在尝试访问或操作一个。这通常发生在试图访问或操作一个。在错误代码中,我们尝试。这个错误的发生是因为。的某个位置,但是由于。的大小为0,所以这将。原创 2023-06-25 21:02:04 · 2480 阅读 · 0 评论 -
Line 24: Char 28: runtime error: member access within null pointer of type ‘TreeNode‘ (solution.cpp)
leetcode 538.把二叉搜索树转换为累加树这个错误是因为在尝试,在right->val这一行对right这个指针进行了解引用操作。但是,如果right是一个空指针(也就是nullptr),这就会导致错误。原创 2023-06-16 13:29:32 · 349 阅读 · 0 评论 -
力扣平台delete的问题:delete出现内存报错ERROR: AddressSanitizer: heap-use-after-free on address
重新看了那个报错用例打了日志看也是也报错,应该判题程序会去调用原来的 root,但是程序把原来的 root 已经删了。一般不 delete 也是没问题的,但是就怕有些题数据量一大你不手动回收的话会内存泄露,毕竟我们用的是c++,不像 Java 那样可以自动 gc。关于delete的问题,我的建议如果确定删是没问题的,可以删一下,这也是良好的编码习惯,实际开发不可能一直不回收。但是,将报错用例在IDE里跑了一下,并没有内存问题。是力扣平台的问题,很坑,delete在IDE里面是正常的,并不会出现内存报错。原创 2023-06-16 13:21:24 · 439 阅读 · 2 评论 -
ERROR: AddressSanitizer: heap-use-after-free on address
悬挂指针”(Dangling Pointer)是一种常见的编程错误,它发生在当一个指针指向的内存已经被释放或者已经超出范围时。在这种情况下,指针仍然存在,但它所指向的内存可能已经被操作系统重新分配给其他地方,或者根本就不能访问。如果试图通过悬挂指针访问这块内存,就可能会导致未定义的行为,比如程序崩溃或者数据损坏。在最开始的写法中,我们把root delete掉了,再调用root->right就会出现内存报错。内存错误"heap-use-after-free",这是因为在C++中,当使用。原创 2023-06-15 13:10:07 · 6297 阅读 · 0 评论 -
cmp报错: error: reference to non-static member function must be called sort(vec.begin(),vec.end(),c
如果是在类里作为成员函数定义了cmp,那么这个cmp就需要依赖函数实例才能使用。非静态成员函数不能直接作为普通函数指针来传入sort中。在C++中,非静态成员函数需要一个对象(即隐式的 “this” 指针)来进行调用,因此不能直接作为普通函数指针来使用,否则编译器不知道用哪个对象来调用该成员函数。这就是你在尝试将 cmp 作为参数传递给 sort 函数时发生错误的原因。另一方面,静态成员函数不依赖于任何对象,因此可以被直接调用,不需要创建对象,就像普通的全局函数一样。因此,原创 2023-06-13 16:01:44 · 2119 阅读 · 0 评论 -
cpp比较坑的问题:int maxValue = LONG_MIN;会发生截断
和maxValue初始值定义为INT_MIN的情况是一样的。只不过此时因为int 接收 long long的截断原因,int 变量maxValue 直接= 0。因此,当我们输入[0]的时候,maxValue经过截断也=0,导致了初始值和第一个节点数值相等,直接返回false。如果maxValue定义成int,输入[0]的时候,输出发生了和输入INT_MIN一样的现象,也就是说,这里如果maxValue定义成int,原创 2023-06-12 22:18:31 · 85 阅读 · 0 评论 -
Line 16: Char 14: runtime error: member access within null pointer of type ‘TreeNode‘ (solution.cpp)
如果所有的if都不成立,找不到数值就返回空指针的写法,并不能代替最开始的空节点判定。,从而引发运行时错误。原创 2023-06-12 22:01:39 · 937 阅读 · 0 评论 -
Line 12: Char 44: error: no viable overloaded operator[] for type ‘vector<int>‘迭代器返回值需要转化为整数索引
的做法非常常见,因为迭代器的主要作用就是用于在容器(如std::vector)中遍历和访问元素,很多时候我们不仅需要访问到元素本身,也需要知道它在容器中的位置(即下标)。同时,报错代码尝试在while循环中进行了迭代器的自减操作,这是不可行的,因为std::lower_bound()返回的是一个临时迭代器,它不能被自减。接收返回迭代器的函数,然后使用it - nums.begin()的操作,将迭代器转化为vector数组的下标。如果想用返回的迭代器得到对应的索引,我们需要对返回的迭代器进行处理。原创 2023-06-12 01:54:54 · 784 阅读 · 0 评论 -
Char 45: runtime error: applying non-zero offset 131060 to null pointer (stl_iterator. h)
此错误表示程序正在尝试在空指针上应用非零偏移,这在 C++ 中是未定义行为。这个错误可能发生在尝试从一个空的 vector 中访问元素时。当 maxIndex 为0,即nums.begin() + maxIndex指向nums.begin(),那么以上代码将尝试在一个空数组上进行操作,引发错误。这个错误通常是由于对空的或者无效的迭代器进行操作引发的,这种操作包括尝试对空迭代器进行递增或者递减等。这样修改后,当子数组为空时,就不会对其进行递归操作,避免了在空数组上进行未定义操作。原创 2023-06-09 22:53:19 · 827 阅读 · 0 评论 -
记录一个cpp的坑:cmp 排序自定义比较函数的问题
参考:http://biasee.com/2016/01/22/STL-sort-segmentation-fault/C++ std的sort,compare函数写成下面这样,可能出现segmentation fault,因为写成a>=b是错误的,不符合stl的strict weak ordering关系。使用C++的标准模板库(Standard Template Library,STL)中的std::sort函数进行排序时,如果你的比较函数(这里是cmp)的实现是return a>=b;原创 2023-06-08 19:58:15 · 307 阅读 · 1 评论 -
leetcode debug过程中遇到的很坑的问题:零宽空格Char 1: error: unknown type name ‘‘
因为这些字符在大多数编辑器中是不可见的,所以一种可能的解决方法是将代码复制到一个能显示这些字符的编辑器中(如某些在线编辑器),然后手动删除这些特殊字符。或者,也可以尝试将代码复制到一个纯文本编辑器中(如Notepad++),然后再复制回来,这可能也能消除这些特殊字符。原因是,原版错误代码中,有一些看不见的特殊字符,即零宽空格。这些字符在大多数文本编辑器中不可见,但是会被编译器识别,并导致编译错误。觉得代码写的没有任何大括号、中文字符的问题,但是出现了红色波浪线。把代码一模一样粘贴到VS中,也会发生报错。原创 2023-06-07 20:41:50 · 239 阅读 · 0 评论