Thread: segmentation fault

  1. #1
    Registered User
    Join Date
    May 2012
    Posts
    1

    Post segmentation fault

    Hey guys, when I try and execute the following code I get a segmentation fault. I tried using gdb to trace it and I'm pretty sure the fault is either in fscanf(fin, "%d", &e); or in fscanf(fin, "%d%d%d", &u, &v, &w); however I can't seem to fix it.

    Would anyone be able to help me correct this fault?
    Thanks in advance

    Code:
    #include <stdio.h>
    
    
    #define GRAPHSIZE 2048
    #define INFINITY GRAPHSIZE*GRAPHSIZE
    #define MAX(a, b) ((a > b) ? (a) : (b))
    
    
    int e; /* The number of nonzero edges in the graph */
    int n; /* The number of nodes in the graph */
    long dist[GRAPHSIZE][GRAPHSIZE]; /* dist[i][j] is the distance between node i and j; or 0 if there is no direct connection */
    long d[GRAPHSIZE]; /* d[i] is the length of the shortest path between the source (s) and node i */
    
    
    void printD() {
    	int i;
    	for (i = 1; i <= n; ++i)
    		printf("%10d", i);
    	printf("\n");
    	for (i = 1; i <= n; ++i) {
    		printf("%10ld", d[i]);
    	}
    	printf("\n");
    }
    
    
    void dijkstra(int s) {
    	int i, k, mini;
    	int visited[GRAPHSIZE];
    
    
    	for (i = 1; i <= n; ++i) {
    		d[i] = INFINITY;
    		visited[i] = 0; /* the i-th element has not yet been visited */
    	}
    
    
    	d[s] = 0;
    
    
    	for (k = 1; k <= n; ++k) {
    		mini = -1;
    		for (i = 1; i <= n; ++i)
    			if (!visited[i] && ((mini == -1) || (d[i] < d[mini])))
    				mini = i;
    
    
    		visited[mini] = 1;
    
    
    		for (i = 1; i <= n; ++i)
    			if (dist[mini][i])
    				if (d[mini] + dist[mini][i] < d[i]) 
    					d[i] = d[mini] + dist[mini][i];
    	}
    }
    
    
    int main(int argc, char *argv[]) {
    	int i, j;
    	int u, v, w;
    
    
    	FILE *fin = fopen("dist.txt", "r");
    	fscanf(fin, "%d", &e);
    	for (i = 0; i < e; ++i)
    		for (j = 0; j < e; ++j)
    			dist[i][j] = 0;
    	n = -1;
    	for (i = 0; i < e; ++i) {
    		fscanf(fin, "%d%d%d", &u, &v, &w);
    		dist[u][v] = w;
    		n = MAX(u, MAX(v, n));
    	}
    	fclose(fin);
    
    
    	dijkstra(1);
    
    
    	printD();
    
    
    	return 0;
    }

  2. #2
    Technical Lead QuantumPete's Avatar
    Join Date
    Aug 2007
    Location
    London, UK
    Posts
    894
    If you compile your code with debug symbols (the -g flag) you will get much better value from your debugger. It should be able to tell you exactly which line the segfault occurs and which variable it is trying to access that results in the segfault.
    "No-one else has reported this problem, you're either crazy or a liar" - Dogbert Technical Support
    "Have you tried turning it off and on again?" - The IT Crowd

  3. #3
    Registered User ledow's Avatar
    Join Date
    Dec 2011
    Posts
    435
    1) We don't have a copy of "dist.txt" to see what it is you're expecting.
    2) We don't know what you're expecting anyway.
    3) If the problem is suspected to be in fscanf, why don't you check it's return value to see if it did it properly? Or at the very least see what you're passing to it BEFORE you pass it to fscanf? Same applies to fopen!
    4) It might also be an idea to printf some values as you go, e.g. of the line read from the files by the code, of the values of i, j, u, v, w, etc. before you start doing array accesses using u and v.

    - Compiler warnings are like "Bridge Out Ahead" warnings. DON'T just ignore them.
    - A compiler error is something SO stupid that the compiler genuinely can't carry on with its job. A compiler warning is the compiler saying "Well, that's bloody stupid but if you WANT to ignore me..." and carrying on.
    - The best debugging tool in the world is a bunch of printf()'s for everything important around the bits you think might be wrong.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Segmentation fault
    By Miffeltoffel in forum C Programming
    Replies: 8
    Last Post: 10-21-2010, 03:55 AM
  2. C Segmentation Fault Help
    By cow_tipper8282 in forum C Programming
    Replies: 5
    Last Post: 10-16-2010, 03:25 PM
  3. Segmentation Fault :(
    By DarkDot in forum C++ Programming
    Replies: 39
    Last Post: 04-07-2007, 04:16 AM
  4. segmentation fault
    By bazzano in forum C Programming
    Replies: 3
    Last Post: 04-26-2006, 08:02 PM
  5. segmentation fault and memory fault
    By Unregistered in forum C Programming
    Replies: 12
    Last Post: 04-02-2002, 11:09 PM

Tags for this Thread