Considering the following setup, I have ran into a quite strange phenomena, which I can not really explain. Using Visual Studio 2005, the following piece of code results in crash. I would like to really know the reason.
playground.cpp
static int local=-1;    
#include "common.h"
int main(int arg)
{
  setit();     
  docastorUpdate();
  return 0;
}
common.h
#include <stdio.h>
#include <iostream>
void docastorUpdate();
static int *gemini;
inline void setit()
{
  gemini = &local;
}
castor.cpp
static int local = 2;
#include "common.h"
void docastorUpdate() {
  setit();
  // crashing here, dereferencing a null pointer
  std::cout << "castor:" << *gemini << std::endl; 
}
The thing is, that the crash disappears when
- I move the inline function setit() to an unnamed namespace
- I make it static
To put it in a nutshell, I would need help to understand the reasons. Any suggestion is appreciated! (I am aware that, this solution is not one of the best partices, just being curious.)
 
     
     
    