Защита динамически размещаемых массивов - PullRequest
2 голосов
/ 01 ноября 2011

Я хочу заполнить динамически созданный массив только один раз в верхней части моей функции. Тогда каждая функция после может только получить доступ к содержимому, но не изменять его. Какой правильный путь:

const double *pt = malloc(sizeof(double)*num);

OR

double *pt = malloc(sizeof(double)*num);
void f(const double array[], ...);

Когда я использую второй метод, должен ли я приводить pt к const?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Возможные решения:

  1. Создайте функцию 'get', которая получает индекс и возвращает значение в массиве, например:

    double get(int index){
        return pt[index];
    }
    

    Makeget публично доступно, но не pt.

  2. Заполните pt, но оставьте его закрытым и вместо этого сделайте доступным указатель 'const', подобный этому:

    //kept private:
    double * pt = malloc(...);
    pt[0] = 1;
    pt[1] = 2;
    ....
    
    //make public
    double const * public_pt = (double const *)pt;
    
0 голосов
/ 01 ноября 2011

Первый метод не будет работать, потому что вы не сможете заполнить массив в первую очередь (так как вы объявили его const).

Второй метод будет работать, если вы уже заполнили массив до , вызывая f().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...