I am attempting to create a DVR simulation in C. I know that I need a nested for loop, but whenever I compile and run the program it produces a segmentation fault after entering the number of routers in the system. The compiler is not producing any errors or warning. Any help would be greatly appreciated. Code below
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int targetRouter[1024];
int nextRouter[1024];
int cost[1024];
}routers;
routers *routerSet[1024];
int main(){
int numberOfRouters;
char buffer[1024];
printf("How many routers are in this network?\n");
fgets(buffer, 1024, stdin);
numberOfRouters = atoi(buffer);
for(int i = 0; i < numberOfRouters; i++){
for(int k=0; k<numberOfRouters; k++){
if(i == k){
routerSet[i]->targetRouter[k] = i;
routerSet[i]->nextRouter[k] = i;
routerSet[i]->cost[k] = 0;
}
else{ //different router
printf("Is router number %d directly connected to router number %d (y/n)?", i, k);
scanf("%s\n", buffer);
if(strncmp(buffer, "y", 1) == 0){
bzero(buffer, sizeof(buffer));
routerSet[i]->targetRouter[k] = k;
routerSet[i]->nextRouter[k] = k;
printf("What is the delay between router number %d and router number %d?", i, k);
fgets(buffer, 1024, stdin);
routerSet[i]->cost[k] = atoi(buffer);
}
else if(strncmp(buffer, "n", 1) == 0){
routerSet[i]->targetRouter[k] = k;
routerSet[i]->nextRouter[k]=-1;
routerSet[i]->cost[k] = -1;
}
else{
printf("Invalid input. Ending program.");
exit(0);
}
bzero(buffer, sizeof(buffer));
}
}
}
for(int i = 0; i < numberOfRouters; i++){
printf("Router table for router number %d", i);
for(int k=0; k < numberOfRouters; k++){
printf("%d | %d | %d\n", routerSet[i]->targetRouter[k], routerSet[i]->nextRouter[k], routerSet[i]->cost[k]);
}
}
}
Please note that this program is not finished. I just can't continue work on the rest of the program until this error is fixed.
You declared an array of null pointers
Note: the pointers in the array are initialized as null pointers because the array has static storage duration.
So using these null pointers to access memory like in these statements
invokes undefined behavior.
You need either declare an array of objects of the structure type instead of pointers
or for each pointer in the array allocate dynamically an object of the structure type.