首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问违规书写位置..。可能是由mpi_get_processor_name函数引起的

访问违规书写位置..。可能是由mpi_get_processor_name函数引起的
EN

Stack Overflow用户
提问于 2013-12-24 19:54:07
回答 1查看 696关注 0票数 0

当我试图在visual 2010环境(IVF 2013,Windows 7 64位)上建立我的第一个英特尔visual +ms-mpi程序时,我遇到了以下错误信息。

错误信息是:

Ox001f3902的未处理异常( HELLO.exe: OxC0000005:访问冲突写入位置0x0000001e )。

我的编译器指出,这个问题似乎与第7行中的函数mpi_get_processor_name有关。

此外,我还可以在同一台机器上成功地编译C++ MPI示例代码。我觉得很奇怪,我无法运行具有类似环境设置的Fortran示例代码。谢谢你帮忙。

代码看起来就像

代码语言:javascript
复制
1  PROGRAM hello
2   INCLUDE 'mpif.h'
3   INTEGER rank, size, ierror, len
4   CHARACTER(30) name
5   INTEGER id, nthreads
6   CALL mpi_init(ierror)                            ! start MPI
7   CALL mpi_comm_size(mpi_comm_world, size, ierror) ! get number of ranks
8   CALL mpi_comm_rank(mpi_comm_world, rank, ierror) ! get rank
9   CALL mpi_get_processor_name(name,len,ierror)     ! get run-host name
10  nthreads = omp_get_num_threads()                 ! get number of threads
11  id = omp_get_thread_num()                        ! get thread
12  CALL mpi_finalize(ierror)                        ! terminate MPI
13 END PROGRAM hello                                 ! Fortran 90
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-24 21:52:20

MPI_GET_PROCESSOR_NAME要求name是一个至少由 MPI_MAX_PROCESSOR_NAME字符组成的数组,至少在Open中是等于256个。所写的名称在右边填充空字符,直到位置MPI_MAX_PROCESSOR_NAMElen设置为实际的名称长度。在您的示例中,name很可能是一个堆栈变量,填充字符覆盖堆栈帧,从而导致访问冲突。

取代:

代码语言:javascript
复制
CHARACTER(30) name

使用

代码语言:javascript
复制
CHARACTER(MPI_MAX_PROCESSOR_NAME) name
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20766132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档