小编Lin*_*yen的帖子

addressSanitizer:地址上的堆缓冲区溢出

我刚开始学习C。

我试图编写一个函数来打开文件,读取BUFFER_SIZE,将内容存储在数组中,然后跟踪字符'\n'(因为我想获取输入的每一行)。

当我设置BUFFER_SIZE非常大时,我可以得到第一行。当我将BUFFER_SIZE合理的小数值(例如42)设置为第一行的末尾时,它会在末尾打印出一些奇怪的符号,但我猜这是我自己的代码中的一个错误。

但是,当我将其设置得BUFFER_SIZE非常小时,例如= 10,然后使用-fsanitizer=address来检查内存泄漏。它抛出错误的怪物:

==90673==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000fb at pc 0x000108868a95 bp 0x7fff573979a0 sp 0x7fff57397998
READ of size 1 at 0x6020000000fb thread T0
Run Code Online (Sandbox Code Playgroud)

如果有人可以从一般意义上解释我:

  • 什么是fsanitizer =地址标记?

  • 什么是堆缓冲区溢出?

  • 什么是地址和线程?在屏幕上以彩色显示线程的标志是什么?

  • 以及为什么它说“在地址读取大小为1。”?

我真的很感激<3

c heap memory-leaks buffer-overflow

7
推荐指数
2
解决办法
1万
查看次数

使用哈希表在球拍中排序更快

所以我有一个像这样的元素的示例列表

(define A (list 'a 'c 'd 'e 'f 'e 'a))
Run Code Online (Sandbox Code Playgroud)

现在我想从这个样本中进行排名

(define (scan lst)
    (foldl (lambda (element a-hash) (hash-update a-hash element add1 0))
           (hash)
           lst))
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的:

> #(('a . 2) ('f . 1) ('e . 2) ....)
Run Code Online (Sandbox Code Playgroud)

因为`scan函数将使哈希表包含唯一键和该键的重复次数(如果它捕获未编制索引的键,它将为该新键创建一个新位置,从0开始计数).

然后我想对哈希表进行排序,因为它没有排序:

(define (rank A)
     (define ranking (scan A))         
     (sort ranking > #:key cdr)))
Run Code Online (Sandbox Code Playgroud)

所以结果看起来像这样:

#(('a.2)('e.2)('f.1)......)

现在我想截断哈希表并在n = 1的阈值处抛弃底部(也就是说只采用重复次数超过2次的元素).

(define (truncate lst n)
    (define l (length lst))
    (define how-many-to-take 
        (for/list
             ([i l]
               #:when (> (cdr (list-ref lst i))
                          n))
               i))
    (take lst …
Run Code Online (Sandbox Code Playgroud)

sorting hash scheme fold racket

5
推荐指数
1
解决办法
324
查看次数

3Jekyll .1.6 不在 Ubuntu 上提供服务:未定义的方法 `bash_on_windows?' 对于 Jekyll::Utils:: 平台:模块

我安装了 jekyll

须藤宝石安装 jekyll

然后我进入我的 GitHub repo 文件夹(其中包含 file index.html)和

杰基尔服务

但它会产生错误:

/var/lib/gems/2.5.0/gems/jekyll-3.8.5/lib/jekyll/drops/document_drop.rb:8: 警告:已初始化常量

Jekyll::Drops::DocumentDrop::NESTED_OBJECT_FIELD_BLACKLIST

/usr/lib/ruby/vendor_ruby/jekyll/drops/document_drop.rb:8: 警告:NESTED_OBJECT_FIELD_BLACKLIST 的先前定义在这里

/var/lib/gems/2.5.0/gems/jekyll-3.8.5/lib/jekyll/drops/drop.rb:8: 警告:已初始化常量 Jekyll::Drops::Drop::NON_CONTENT_METHODS

/usr/lib/ruby/vendor_ruby/jekyll/drops/drop.rb:8: 警告:NON_CONTENT_METHODS 的先前定义在这里

配置文件:无

配置文件:无

配置文件:无

        Source: /home/chi/eivorjussila.github.io

   Destination: /home/chi/eivorjussila.github.io/_site
Run Code Online (Sandbox Code Playgroud)

增量构建:禁用。使用 --incremental 启用

 Generating... 

               done in 0.095 seconds.
Run Code Online (Sandbox Code Playgroud)

杰基尔 3.1.6 | 错误:未定义的方法“bash_on_windows?” 对于 Jekyll::Utils::Platforms:Module

有谁知道为什么?

jekyll

4
推荐指数
1
解决办法
403
查看次数

Django 应用程序在本地运行,但我在 Heroku 上发现 CSRF 验证失败

我的应用程序运行良好,heroku local但部署到 Heroku 后,每次我尝试以管理员身份登录/注册/登录时,它都会返回如下所示的错误。

我试图提出@csrf_exempt意见profile,但这并没有解决问题。

我能做些什么?

在此输入图像描述

python django heroku csrf python-3.x

4
推荐指数
1
解决办法
5173
查看次数

C 中释放链表中节点的小改进

看一下这段代码,它想要释放 C 中链表内所有分配的节点:

    ptr = list;
    while (ptr != NULL)
    {
        node *next = ptr->next;
        free(ptr);
        ptr = next;
    }
Run Code Online (Sandbox Code Playgroud)

原因是,在释放当前节点之前,我们需要一个临时变量 next 来存储指向下一个节点的指针。

你看到它node *next = ptr->next;在循环内部了吗?这样每次循环运行时,都会创建一个新的临时节点来存储指向下一个节点的指针。如果我们在循环外部创建变量节点并在循环内部重新分配它,是不是更好?

像这样:

    ptr = list;
    node *next = NULL;
    while (ptr != NULL)
    {
        next = ptr->next;
        free(ptr);
        ptr = next;
    }
Run Code Online (Sandbox Code Playgroud)

这样效率会更高吗?

c malloc free declaration linked-list

4
推荐指数
1
解决办法
108
查看次数