Sponsored Content
Top Forums Programming (MPI) Segmentation fault with dynamic allocated 2D array Post 302150646 by lancer6238 on Wednesday 12th of December 2007 04:04:42 AM
Old 12-12-2007
(MPI) Segmentation fault with dynamic allocated 2D array

Hi all,
I'm getting segmentation fault errors when I try to send/receive 2 rows of a matrix as a block, and I can't figure out why.

Basically, I have a 4x5 matrix with an extra top row and an extra leftmost column, making it a (4+1)x(5+1) matrix stored in P0. I'm trying to send the 2nd and 3rd row as a block to P1, print out the contents, send the 4th and 5th row as a block to P1, then print out the contents again. I have dynamically allocated a (4+1)x(5+1) memory block to cellblock, then used the pointers cell[i] to point to each "row" of cellblock, so I can access the 2D array by cell[i][j].

I get the correct output, but with segmentation fault at the end.

Here is my code:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(int argc, char** argv)
{
   int rank, i, j, k = 1;
   int **cell, *row1, *cellblock;
   MPI_Status status;
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   row1 = (int*)calloc((5+1) * 2, sizeof(int));
   cellblock = (int*)calloc((4+1)*(5+1), sizeof(int));
   cell = &cellblock;
   for (i = 0 ; i < (4+1) ; i++)
        cell[i] = &cellblock[i*(5+1)];
   if (rank == 0)
   {
        for (i = 0 ; i < (4+1) ; i++)
              for (j = 0 ; j < (5+1) ; j++)
                   cell[i][j] = k++;
        for (i = 1 ; i < 5 ; i+=2)
              MPI_Send(&(cell[i][0]), (5+1)*2, MPI_INT, 1, 1, MPI_COMM_WORLD);
   }
   if (rank == 1)
   {
        for (i = 0 ; i < 2 ; i++)
        {
            MPI_Recv(row1, (5+1)*2, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
            for (j = 0 ; j < (5+1)*2 ; j++)
                printf("%d ", row1[j]);
            printf("\n");
       }
   }
   free(row1);
   free(cellblock);
   MPI_Finalize();
   return 0;

}

Please advise. Thank you.

Regards,
Rayne
 

10 More Discussions You Might Find Interesting

1. Programming

segmentation fault

hi all i'm trying to execute a c program under linux RH and it gives me segmentation fault, this program was running under unix at&t anybody kow what the problem could be? thanx in advance regards (2 Replies)
Discussion started by: omran
2 Replies

2. UNIX for Dummies Questions & Answers

Segmentation Fault

hello all, I tried a program on an array to intialise array elements from the standard input device.it is an integer array of 5 elements.but after entering the 4th element it throws a message called "Segmentation Fault" and returns to the command prompt without asking for the 5th element. ... (3 Replies)
Discussion started by: compbug
3 Replies

3. Programming

Hi! segmentation fault

I have written a program which takes a directory as command line arguments and displays all the dir and files in it. I don't know why I have a problem with the /etc directory.It displays all the directories and files untill it reaches a sub directory called peers which is in /etc/ppp/peers.the... (4 Replies)
Discussion started by: vijlak
4 Replies

4. Programming

segmentation fault

If I do this. Assume struct life { char *nolife; } struct life **life; // malloc initialization & everything if(life->nolife == 0) Would I get error at life->nolife if it is equal to 0. wrong accession? (3 Replies)
Discussion started by: joey
3 Replies

5. Programming

segmentation fault

What is segmentation fault(core dumped) (1 Reply)
Discussion started by: gokult
1 Replies

6. Programming

Segmentation fault.

I'm getting a segmentation fault. I'm new to Linux programming. Thanks so much for all of your input.:eek: #include </usr/include/mysql++/mysql++.h> #include <stdio.h> #include <iostream> #include <sstream> #include <string.h> using namespace std; int outputToImport(const char*... (1 Reply)
Discussion started by: sepoto
1 Replies

7. Programming

segmentation fault.

This code is causing a segmentation fault and I can't figure out why. I'm new to UNIX and I need to learn how to avoid this segmentation fault thing. Thank you so much. Thanks also for the great answers to my last post.:):b: int main() { mysqlpp::Connection conn(false); if... (3 Replies)
Discussion started by: sepoto
3 Replies

8. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies

9. Programming

Segmentation fault

I keep getting this fault on a lot of the codes I write, I'm not exactly sure why so I'd really appreciate it if someone could explain the idea to me. For example this code #include <stdio.h> main() { unsigned long a=0; unsigned long b=0; int z; { printf("Enter two... (2 Replies)
Discussion started by: sizzler786
2 Replies

10. Programming

C. To segmentation fault or not to segmentation fault, that is the question.

Oddities with gcc, 2.95.3 for the AMIGA and 4.2.1 for MY current OSX 10.14.1... I am creating a basic calculator for the AMIGA ADE *NIX emulator in C as it does not have one. Below are two very condensed snippets of which I have added the results inside the each code section. IMPORTANT!... (11 Replies)
Discussion started by: wisecracker
11 Replies
ztpqrt2.f(3)							      LAPACK							      ztpqrt2.f(3)

NAME
ztpqrt2.f - SYNOPSIS
Functions/Subroutines subroutine ztpqrt2 (M, N, L, A, LDA, B, LDB, T, LDT, INFO) ZTPQRT2 Function/Subroutine Documentation subroutine ztpqrt2 (integerM, integerN, integerL, complex*16, dimension( lda, * )A, integerLDA, complex*16, dimension( ldb, * )B, integerLDB, complex*16, dimension( ldt, * )T, integerLDT, integerINFO) ZTPQRT2 Purpose: ZTPQRT2 computes a QR factorization of a complex "triangular-pentagonal" matrix C, which is composed of a triangular block A and pentagonal block B, using the compact WY representation for Q. Parameters: M M is INTEGER The total number of rows of the matrix B. M >= 0. N N is INTEGER The number of columns of the matrix B, and the order of the triangular matrix A. N >= 0. L L is INTEGER The number of rows of the upper trapezoidal part of B. MIN(M,N) >= L >= 0. See Further Details. A A is COMPLEX*16 array, dimension (LDA,N) On entry, the upper triangular N-by-N matrix A. On exit, the elements on and above the diagonal of the array contain the upper triangular matrix R. LDA LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). B B is COMPLEX*16 array, dimension (LDB,N) On entry, the pentagonal M-by-N matrix B. The first M-L rows are rectangular, and the last L rows are upper trapezoidal. On exit, B contains the pentagonal matrix V. See Further Details. LDB LDB is INTEGER The leading dimension of the array B. LDB >= max(1,M). T T is COMPLEX*16 array, dimension (LDT,N) The N-by-N upper triangular factor T of the block reflector. See Further Details. LDT LDT is INTEGER The leading dimension of the array T. LDT >= max(1,N) INFO INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value Author: Univ. of Tennessee Univ. of California Berkeley Univ. of Colorado Denver NAG Ltd. Date: April 2012 Further Details: The input matrix C is a (N+M)-by-N matrix C = [ A ] [ B ] where A is an upper triangular N-by-N matrix, and B is M-by-N pentagonal matrix consisting of a (M-L)-by-N rectangular matrix B1 on top of a L-by-N upper trapezoidal matrix B2: B = [ B1 ] <- (M-L)-by-N rectangular [ B2 ] <- L-by-N upper trapezoidal. The upper trapezoidal matrix B2 consists of the first L rows of a N-by-N upper triangular matrix, where 0 <= L <= MIN(M,N). If L=0, B is rectangular M-by-N; if M=L=N, B is upper triangular. The matrix W stores the elementary reflectors H(i) in the i-th column below the diagonal (of A) in the (N+M)-by-N input matrix C C = [ A ] <- upper triangular N-by-N [ B ] <- M-by-N pentagonal so that W can be represented as W = [ I ] <- identity, N-by-N [ V ] <- M-by-N, same form as B. Thus, all of information needed for W is contained on exit in B, which we call V above. Note that V has the same form as B; that is, V = [ V1 ] <- (M-L)-by-N rectangular [ V2 ] <- L-by-N upper trapezoidal. The columns of V represent the vectors which define the H(i)'s. The (M+N)-by-(M+N) block reflector H is then given by H = I - W * T * W**H where W**H is the conjugate transpose of W and T is the upper triangular factor of the block reflector. Definition at line 174 of file ztpqrt2.f. Author Generated automatically by Doxygen for LAPACK from the source code. Version 3.4.1 Sun May 26 2013 ztpqrt2.f(3)
All times are GMT -4. The time now is 07:36 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy