Передача определенного элемента массива с использованием указателя - PullRequest
0 голосов
/ 27 декабря 2010

У меня проблема с передачей указателя по ссылке.

Это метод

void set_range(double **measu)  
{   
if ((*measu)[0] < 0) //or i is used for a loop  
   return ;         
}


int main()
{
   double *mes;
   set_range(&mes[1]);

}

Я выделил память, и необходимые значения установлены.Но эта программа выдает ошибку «Необработанное исключение Доступ к месту чтения».Поэтому мой вопрос заключается в том, как передать указатель mes [1] вместо mes [0] (который обычно передается при указании (& mes)) в метод set_range?

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Одна проблема в том, что &mes[1] имеет тип double *, а не double **, требуемый для вашей функции.

Другая проблема заключается в том, что mes ни на что не указывает - он не инициализирован.Поэтому разыменование дает доступ к нежелательной почте (вот почему вы получаете нарушение прав доступа).

Я пытаюсь придумать какой-то код, чтобы помочь прояснить ситуацию, но, честно говоря, я понятия не имею, что вы пытаетесь сделать,Еще немного кода поможет нам понять, какова ваша цель, но, учитывая вышесказанное, я понятия не имею, зачем вам нужен double ** или вам нужна динамическая память или просто одна переменная double.

1 голос
/ 27 декабря 2010

Измените свою функцию на double* вместо double**, например:

void set_range(double *measu)
{
  if (*measu < 0) //or i is used for a loop
    return;
}

int main()
{
  double *mes;
  ...
  set_range(&mes[1]);
}

В качестве альтернативы используйте вместо нее реальную ссылку:

void set_range(double &measu)
{
  if (measu < 0) //or i is used for a loop
    return;
}

int main()
{
  double *mes;
  ...
  set_range(mes[1]);
} 
...