Search code examples
c++vectorgrapherror-handlingruntime-error

Why getting reference binding to null-pointer error?


I am solving the following Leetcode problem:

https://leetcode.com/problems/find-if-path-exists-in-graph/

I am getting the following error:

Line 1034: Char 9: runtime error: reference binding to null pointer of type 'std::vector<int, std::allocator<int>>' (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9

The code for my approach:

class Solution {
public:
    void dfs(int *visited,int node,vector<vector<int>>&adj)
    {
        visited[node]=1;
        for(auto child:adj[node])
        {
            if(visited[child]==-1)
                dfs(visited,child,adj);
        }
    }
    bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {
        vector<vector<int>>adj;
        for(auto it:edges)
        {
            adj[it[0]].push_back(it[1]);
            
        }
        int visited[n];
        for(int i=0;i<n;i++)
            visited[i]=-1;
        
        dfs(visited,source,adj);
        
        return visited[destination]==1;
    }
};

I'm getting this error for almost every graph problem. Can someone point out the mistake?


Solution

  • The outer vector of adj should be resized, before adding elements to the inner vector.

    bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {
        vector<vector<int>>adj;
        for(auto& it:edges)
        {
            if (adj.size() < (it[0] + 1))
            {
                adj.resize(it[0] + 1);    
            }
            
            adj[it[0]].push_back(it[1]);
                
        }
        
        //Rest of the code  
    }