Как передавать пустой массив через extern С++?

Рейтинг: -1Ответов: 1Опубликовано: 16.01.2023

Есть заголовочный файл и 2 cpp файла. Если в заголовочном сделаю

extern double mas[3];

Потом в первом си файле

double mas[3] = {0, 1, 2};

То во втором могу нормально обращаться к элементам. Но если объявлю в заголовочном вот так:

extern double *mas;

Потом в первом в самом начале:

double *mas;

И в одной из функций уже через malloc выделю под него память и заполню. А потом обращусь к функции из второго файла. В этом случае он получается передается незаполненный и не с выделенной памятью под него. Как это правильно сделать, чтобы можно было использовать заполненный во втором файле?

Ответы

▲ 3

Что-то вы говорите, но не договариваете. По вашему описанию:

ext.h

extern double * mas;

1.c

#include <stdlib.h>
#include "ext.h"
double * mas;
void func1()
{
    mas = malloc(3*sizeof(double));
    mas[0] = (mas[1] = (mas[2] = 3) + 1) + 1;
}
void func2();
int main()
{
    func1();
    func2();
}

2.c

#include <stdio.h>
#include "ext.h"

void func2()
{
    printf("%lf %lf %lf\n",mas[0],mas[1],mas[2]);
}

Скомпилировано VC++ без единого замечания, на выходе

5.000000 4.000000 3.000000

Что я делаю не так?

Что делаете не так вы, сказать не могу, вы же свой код не показываете...