The easiest way to accomplish this is to create a way for the creating contract to report what it's doing. I'll refer to the contracts as "factory" and "generated", where there is one "factory" with a function that can create unlimited "generated" contracts. 

Factory needs a getter function or event emitter; some way of exposing the addresses of the contracts it created. 

With event emitter:

    pragma solidity ^0.4.2;

    contract factory {
    
      event LogContractCreated(address generated);
    
      function createContract() public returns(bool success)
      {
        Generated g = new Generated();
        LogContractCreated(g); // Generated g is directly convertable to address
        return true;
      }
    }

    contract Generated {
        // whatever it does
    }

With getter function:

    pragma solidity ^0.4.2;

    contract factory {

      // keep track of generated addresses
      address[] private generated;
    
      function createContract() public returns(bool success)
      {
        Generated g = new Generated(); // make a new Generated and not its address
        generated.push(g); // record the address for later
        return true;
      }
    
      // optionally, report how many rows are in the list
      function getGeneratedCount() public constant returns(uint count) {
        return generated.length;
      }
    
      // achieve similar result setting generated to "public" near line 6
      function getAddressAtIndex(uint row) public constant returns(address contractAddress) {
        return generated[row];
      }
    }
    
    contract Generated {
        // whatever it does
    }