Sponsored Content
Top Forums Programming Segmentation Fault ERROR in C Post 302958054 by Don Cragun on Monday 19th of October 2015 04:04:34 AM
Old 10-19-2015
The code:
Code:
  vet = (int**)malloc( (N)*(N)*sizeof(int*) );

allocates space for n**2 pointers to integers.

The code:
Code:
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
      scanf("%d", &vec[i][j]);

Tries to store N**2 integers (not pointers to integers) into a doubly dimensioned array, but the compiler has never been told the dimensions of that array. So, that can't work.

It looks like your code might be trying to set up an array of N pointers with each pointer pointing to a vector of N integers. But without seeing the code that defines check_property(), I'm obviously just guessing. Assuming that the 1st argument to that function is supposed to be a pointer to an array of N integers (not an array of pointers to integers), the following modification of your program might give you something you can use as a starting point:
Code:
#include <stdio.h>
#include <stdlib.h>

char *IAm;

/* For this demo we dn't care about the argument being a power of 2; just > 0 */
int check(int N) {
	return(N > 0);
}

/* Calculate subscript into a vector for a simulated NxN array. */
int s(int N, int row, int col) {
	if(N < 0 || row < 0 || col < 0 || row >= N || col >= N) {
		fprintf(stderr, "%s: s(N=%d,row=%d,col=%d)\n",
		    IAm, N, row, col);
		fprintf(stderr, "%s: s(): Expect N>0, 0<=row<N, 0<=col<N\n",
		    IAm);
		exit(4);
	}
	return(row * N + col);
}

int main(int argc, char *argv[]) {
	int	i,
		j,
		N,
		result = 0,
		*vec;		/* Note *vec; not **vec. */

	IAm = argv[0];
	if (argc < 2) {
		fprintf(stderr, "Usage: %s N\n", argv[0]);
		exit(1);
	}

	/* ... how many numbers to read */
	N = atoi(argv[1]);
	/* check if N is a power of two; exit if not */
	if (! check(N)) {
		fprintf(stderr,
		    "%d is not a power of 2 as required.  Exiting.\n", N);
		exit(2);
	}

	vec = (int*)malloc( (N)*(N)*sizeof(int) ); /* int**->int*; int*->int */
	if ( vec == NULL ) {
		fprintf (stderr, "ERROR: not enough memory available!\n");
		exit(3);
	}

	for (i = 0; i < N; i++)
		for (j = 0; j < N; j++)
			scanf("%d", &vec[s(N, i, j)]); /* [i][j]->[s(N,i,j)] */

	printf("\nOriginal array:\n");  /* Trailing space removed from format.*/
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++)
			printf("%d ", vec[s(N, i, j)]);
		printf("\n");
	}

/* Without knowing what check_property() does, I don't know if:
**	check_property(vec[i], 0, N-1)
** in the following just needs to be changed to:
**	check_property(&vec[i * N], 0, N-1)
** or if something much deeper needs to be done.
*/
	/* Now process array; example below is to add numbers */
//	for (i = 0; i < N; i++) {
//		result = check_property(vec[i], 0, N-1);
//		printf("result[line %d]: %d\n", i, result);
//	}

	/* free memory */
	free(vec);

	exit(0);
}

Obviously you need to replace the check() function in this code with your own check() function. And, obviously, you need to have something that pipes or redirects a file that contains N**2 strings representing integer values into this code. If you just invoke it as:
Code:
./program 16

your program will hang until you type in 256 integer values separated by whitespace characters and with at least the last integer value followed by a <newline>.

Note also that instead of using vec as a doubly dimensioned array when reading values into it and printing the value stored in it, it treats it as a singly dimensioned array and gives the function s() the dimensions of the array and the row and column values to get the offset in that array treated as though it were a doubly dimensioned array.

If you invoke it with:
Code:
echo 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 | ./program 4

it will produce the output:
Code:
Original array:
11 12 13 14 
21 22 23 24 
31 32 33 34 
41 42 43 44

These 3 Users Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. 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

2. AIX

Segmentation fault

Hi , During execution a backup binary i get following error "Program error 11 (Segmentation fault), saving core file in '/usr/datatools" Riyaz (2 Replies)
Discussion started by: rshaikh
2 Replies

3. UNIX for Dummies Questions & Answers

What's the difference between Segmentation fault and Bus error and Illegal...?

What's the difference between Segmentation fault and Bus error and Illegal instruction? Sometimes I got the one, and sometimes i got another, what are their differences? Segmentation fault (core dump)? Bus error (core dump)? Illegal instruction (core dump) Thanks Daniel (2 Replies)
Discussion started by: lakeat
2 Replies

4. UNIX for Advanced & Expert Users

capture sqsh segmentation fault error

hi all is there any way to capture the segmentation fault error when i run sqsh on a unix shell script. Ex: #!/bin/ksh sqsh -S "server" -U "user" -P "pwd" << EOF use mydb go exec proc1 go exit EOF retval=$? echo "sqsh return value $retval" if then exit (1 Reply)
Discussion started by: sudheer1984
1 Replies

5. Programming

segmentation fault

Hi, I am having this segmentation fault not in the following program, bt. in my lab program . My lab program is horrible long so cannot post it here bt. I am using the following logic in my program which is giving the segmentation fault. Bt. if I run this sample program as it is it dosen't give... (3 Replies)
Discussion started by: mind@work
3 Replies

6. Shell Programming and Scripting

Segmentation Fault(Core Dump) Error

Hi all, I have a folder with some 28 files. I have a script file that will iteratively take one file at a time from the folder and provide an output for the input file. Till the 7th file, there was no problem but from the 8th file onwards, i got this Segmentation Fault(Core Dump) error. A file... (2 Replies)
Discussion started by: mick_000
2 Replies

7. Programming

getting Segmentation Fault (core dumped) error but Program runs fine.

i am executing following program int main() { char str; FILE * fp; int i=0; ... (4 Replies)
Discussion started by: bhavesh.sapra
4 Replies

8. 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

9. 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

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
All times are GMT -4. The time now is 03:36 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy