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
ztpqrt.f(3)							      LAPACK							       ztpqrt.f(3)

NAME
ztpqrt.f - SYNOPSIS
Functions/Subroutines subroutine ztpqrt (M, N, L, NB, A, LDA, B, LDB, T, LDT, WORK, INFO) ZTPQRT Function/Subroutine Documentation subroutine ztpqrt (integerM, integerN, integerL, integerNB, complex*16, dimension( lda, * )A, integerLDA, complex*16, dimension( ldb, * )B, integerLDB, complex*16, dimension( ldt, * )T, integerLDT, complex*16, dimension( * )WORK, integerINFO) ZTPQRT Purpose: ZTPQRT computes a blocked 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 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. NB NB is INTEGER The block size to be used in the blocked QR. N >= NB >= 1. 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 upper triangular block reflectors stored in compact form as a sequence of upper triangular blocks. See Further Details. LDT LDT is INTEGER The leading dimension of the array T. LDT >= NB. WORK WORK is COMPLEX*16 array, dimension (NB*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 number of blocks is B = ceiling(N/NB), where each block is of order NB except for the last block, which is of order IB = N - (B-1)*NB. For each of the B blocks, a upper triangular block reflector factor is computed: T1, T2, ..., TB. The NB-by-NB (and IB-by-IB for the last block) T's are stored in the NB-by-N matrix T as T = [T1 T2 ... TB]. Definition at line 189 of file ztpqrt.f. Author Generated automatically by Doxygen for LAPACK from the source code. Version 3.4.1 Sun May 26 2013 ztpqrt.f(3)
All times are GMT -4. The time now is 05:24 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy