Возврат массива
первая
Код:
unsigned char* summtocode(double d)
{
unsigned char cod[5];
cod[0]=0;
cod[1]=0;
cod[2]=0;
cod[3]=0;
cod[4]=0;
if(d==0.0)
return cod;
...код сильно большой вкратце тут идут расчеты
return cod;
}
{
unsigned char cod[5];
cod[0]=0;
cod[1]=0;
cod[2]=0;
cod[3]=0;
cod[4]=0;
if(d==0.0)
return cod;
...код сильно большой вкратце тут идут расчеты
return cod;
}
вторая функция
Код:
unsigned char* chektocode(int i1)
{
unsigned char cod[2];
cod[0]=0;
cod[1]=0;
if(i1<=255)
{
cod[0]=i1;
}
else
{
z=i1/256;
cod[1]=z;
cod[0]=i1-(z*256);
}
return cod;
}
{
unsigned char cod[2];
cod[0]=0;
cod[1]=0;
if(i1<=255)
{
cod[0]=i1;
}
else
{
z=i1/256;
cod[1]=z;
cod[0]=i1-(z*256);
}
return cod;
}
Ваш указатель указывает на переменную, время жизни которой уже давным давно закончилось.
Советую читать статьи в которых присутсвуют слова "область видимости переменных в С++".
Как вариант - использование ссылок.
Спасибо за указание ошибки. :rolleyes: действительно сразу не обратил внимание
Код:
unsigned char * pointer;
функцию изменил таким образом:
Код:
unsigned char* chektocode(int i1)
{
unsigned char cod[2];
cod[0]=0;
cod[1]=0;
if(i1<=255)
{
cod[0]=i1;
}
else
{
z=i1/256;
cod[1]=z;
cod[0]=i1-(z*256);
}
pointer=cod;
return pointer;
}
{
unsigned char cod[2];
cod[0]=0;
cod[1]=0;
if(i1<=255)
{
cod[0]=i1;
}
else
{
z=i1/256;
cod[1]=z;
cod[0]=i1-(z*256);
}
pointer=cod;
return pointer;
}
перед возвратом через трассировку проверяю в массиве pointer правильные значения, но когда вернул его в нем по прежнему только один элемент с постоянным значением 69, пробовал после вызова функции обращаться не к массиву который вернул а напрямую к массиву pointer результат тот же
Ваш указатель по прежнему указывает на неопределенную область памяти. Это С/С++. Смиритесь и прочтите чтото для ньюбов :)
Для вас наиболее очевидным вариантом является передача в функцию указатель на массив, числового значения и границы массива (например).
Дам небольшую подсказку - *,& - вот про эти значки почитайте внимательно и разберитесь с ними, либо переходите на C#.
Код:
unsigned char cod[5];
cod[0]=0;
cod[1]=0;
cod[2]=0;
cod[3]=0;
cod[4]=0;
cod[0]=0;
cod[1]=0;
cod[2]=0;
cod[3]=0;
cod[4]=0;
страшно подумать если массив будет, к примеру, 10к
Код:
if(d==0.0)
return cod;
...код сильно большой вкратце тут идут расчеты
return cod;
}
return cod;
...код сильно большой вкратце тут идут расчеты
return cod;
}
d == 0 - для float такое условие некорректно
Код:
if(i1<=255)
{
cod[0]=i1;
}
else
{
z=i1/256;
cod[1]=z;
cod[0]=i1-(z*256);
}
{
cod[0]=i1;
}
else
{
z=i1/256;
cod[1]=z;
cod[0]=i1-(z*256);
}
забавно...
а почему не 4 if, параметр то int ? ;)
а ведь можно без единого if...