- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Welcome all,
I have a following code:
program aaaa
implicit none
double precision, dimension(:), allocatable :: inp,outp
integer ::n,i
read(*,*) n
allocate(inp(n),outp(n))
write(*,*) allocated(inp), allocated(outp)
write(*,*) inp(1)
inp=cshift(outp,-size(outp)/2)
write(*,*) inp(1)
end program aaaa
It really does nothing - it just applies cyclic rotation of dynamically created array.
But when I use is for large n (in my case - over 10^6) then Segmentation fault occurs. More precisely this is the output:
T T
0.000000000000000E+000
Segmentation fault
I also discovered that by increasing the limit for stack memory the segmentation fault can be avoided. Clearly I am using cshift not appropriately.
Additionally the code perform does not exists when the compilation is done with gfortran, but it exists with ifort v12.0.0.
What is going on? I tried to compile with -check all, but it provides no info.
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You've gone part way to understanding this yourself. Have you checked on whether the "problem" is associated with how large an array you can allocate on stack? Remember that the suggested way in ifort to avoid such a limit is -heap-arrays, while gfortran may switch large arrays automatically to heap.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes I did check it - as I wrote increasing stack memory solves the problem. Nevertheless the solution works just perfect. Thanks

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page