To understand how this can happen you need to understand process/thread model of Linux. Linux follows fork-and-exec model inherited from UNIX. Process spawned by fork() system call in this model is a something of a cross between thread and Windows process.
When the thread is spawned (doesn't matter in Linux or in Windows), new thread shares its address space with parent. Both can find the same objects by accessing to the same addresses. But these threads use different stacks. As a result local variables of both threads is guaranteed to be not have the same addresses.
When process is spawned in Windows environment, the OS build entirely new address space from the scratch and populate it by memory and data needed. In theory, local variable of both processes can have the same addresses but in practice probability of this will be very low. And even in the case when both variables will use the same address, these two variables will still be different objects.
Processes of UNIX have similarity with threads and with Windows processes. Like in the case of second one, OS will create NEW address space for a child process, but in contrast to Windows, Linux creates it by lazy copying of the parent process address space with use of Copy-On-Write (COW) approach. COW mean that both processes will share the same memory, but until the moment when one of them will modify it. On the moment of attempt to write to memory the OS will be involved again to make to copy chunk of memory which will be changed and assign one copy to parent and another one to child. Starting from this moment each process will work with its own independent copy of the objects in the modified chunk of memory, but they will still have the same addresses. The same is true for stack and local variables stored on it.
In your case you have two child with two copies of the same stack on which local variables are stored on the same addresses but in different address spaces. Then you have run the same code on both childs. In other words you have the same initial state of the stack layout and run the same code which modifies this layout in the same way. As a result you will have the same local variables located on the same addresses.