函数返回时全局变量变为NULL

问题描述 投票:0回答:0

我尝试使用“extern”设置一个全局变量数组 ptr,但在我用来初始化它的函数返回后,该数组变为 NULL。

我在 globals.h 中声明 ptr

#ifndef GLOBALS_H
#define GLOBALS_H

extern const int N;
extern double *ptr;


void init_globals();
void cleanup_globals();

#endif /* GLOBALS_H*/

globals.c 用于定义和初始化它:

#include "globals.h"
#include <stdlib.h>
#include <stdio.h>

const int N=3;
double *ptr;

void init_globals()
{
    double *ptr = calloc(N, sizeof(double));
    for(int i = 0; i<N; i++)
    {
        ptr[i] = 9;
    }
}


void cleanup_globals()
{
    free(ptr);
    ptr = NULL;
}

最后是 main.c 文件:

#include <stdio.h>
#include "globals.h"
#include <stdlib.h>

int main()
{
    init_globals();
    if (ptr == NULL)
    {
        printf("ptr is NULL...\n");
    }
   
    cleanup_globals();
    return 0;
}

我正在将 cmake 与 VScode 和 Visual Studio Build Tools 2019 一起用于编译器 CMakeLists.txt 代码:

cmake_minimum_required(VERSION 3.0.0)
project(test_project VERSION 0.1.0)

include(CTest)
enable_testing()
set(CMAKE_C_STANDARD 17)

add_executable(test_project globals.c main.c)
include_directories(test_project PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

编译得很好。我检查了调试器,我看到正在分配的数组和我选择的值,但是一旦 init_globals() 返回,ptr 就会变为 NULL。我的印象是它不应该。我相信文件链接正确,所以我有点无能为力。

arrays c cmake extern
© www.soinside.com 2019 - 2024. All rights reserved.