小编Kla*_*men的帖子

关于C++中全局内联函数的一个例子

考虑到以下设置,我遇到了一个非常奇怪的现象,我无法解释.使用Visual Studio 2005,以下代码导致崩溃.我想知道原因.

playground.cpp

static int local=-1;    
#include "common.h"

int main(int arg)
{

  setit();     
  docastorUpdate();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

COMMON.H

#include <stdio.h>
#include <iostream>

void docastorUpdate();

static int *gemini;

inline void setit()
{
  gemini = &local;
}
Run Code Online (Sandbox Code Playgroud)

castor.cpp

static int local = 2;

#include "common.h"

void docastorUpdate() {
  setit();

  // crashing here, dereferencing a null pointer
  std::cout << "castor:" << *gemini << std::endl; 
}
Run Code Online (Sandbox Code Playgroud)

问题是,当崩溃消失时

  1. 我将内联函数setit()移动到一个未命名的命名空间
  2. 我让它变得静止

简而言之,我需要帮助才能理解原因.任何建议表示赞赏!(我知道,这个解决方案不是最好的部分之一,只是好奇.)

c++ static pointers global inline

3
推荐指数
2
解决办法
934
查看次数

标签 统计

c++ ×1

global ×1

inline ×1

pointers ×1

static ×1