使用 Intel Inspector 时出现不匹配的分配/释放错误

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

考虑以下最小工作示例:

program p
    type t
        integer,allocatable::i
    end type
    type(t),allocatable::o
    allocate(o)
    deallocate(o)
end

此代码是使用英特尔编译器 (

ifx 2024.2.1
) 和标志
-O2 -g
编译的。使用英特尔检查器 (
inspxe-cl 2022.1
) 和选项
--collect mi3
分析可执行文件会导致错误:

P1: Error: Mismatched allocation/deallocation: New
 P1.2: Error: Mismatched allocation/deallocation: New
  a.out!0x8ac1: Error X2: Mismatched deallocation site: Function do_deallocate_all: Module ./a.out
  ./a.f90(6): Error X3: Allocation site: Function MAIN_: Module ./a.out

将编译优化标志更改为

-O0
不会删除
deallocate
语句,并且以
a.out!0x8ac1
开头的错误行将指向代码中包含此语句的行:

  ./a.f90(7): Error X2: Mismatched deallocation site: Function MAIN_: Module ./a.out

为什么英特尔 Inspector 认为这是一个错误以及如何修复它?

fortran dynamic-memory-allocation intel-fortran
1个回答
0
投票

正如问题评论中已经讨论的那样,这是英特尔检查器的误报。截至 2024 年 3 月 28 日,该软件已已弃用,因此此问题不会得到解决。英特尔建议在新版本的编译器中使用 Sanitizer(例如

-fsanitize=address
编译标志)或 Vagrind。

(我认为,如果有人偶然发现同样的问题,保留这个问题是明智的。)

© www.soinside.com 2019 - 2024. All rights reserved.