Не пойму в чём дело:(
От: andrey.def Россия  
Дата: 08.04.05 18:56
Оценка:
Любди, подскажите в чём проблема: при выполнении указанного ниже цикла в при w=53 происходит переобозначение c[0], до этого оно было=0!
for(int w=0;w<(dlina+1-reg_length);w++)
{
for (int j=0;j<reg_length;j++)
l_temp+=mnog[j]*b[w+j-1];
b[w+reg_length]=g_k*c[w+reg_length]+l_temp;
}
ЗЫ: просьба не ругать, если чего не так С я немного подзабыл...
Спасибо за внимание.
Re: Не пойму в чём дело:(
От: Анатолий Широков СССР  
Дата: 08.04.05 19:01
Оценка:
Одно можно сказать точно — у тебя выход за пределы диапазона массива b — как результат — бъешь по чужой памяти. Более точно можно ответить, если ты приведешь реальный код с объявлением переменных.
Re: Не пойму в чём дело:(
От: korzhik Россия  
Дата: 08.04.05 19:04
Оценка:
Здравствуйте, andrey.def, Вы писали:

AD>Любди, подскажите в чём проблема: при выполнении указанного ниже цикла в при w=53 происходит переобозначение c[0], до этого оно было=0!

AD>for(int w=0;w<(dlina+1-reg_length);w++)
AD>{
AD> for (int j=0;j<reg_length;j++)
AD> l_temp+=mnog[j]*b[w+j-1];
AD> b[w+reg_length]=g_k*c[w+reg_length]+l_temp;
AD>}
AD>ЗЫ: просьба не ругать, если чего не так С я немного подзабыл...
AD>Спасибо за внимание.

Чему равно dlina
Чему равно reg_length
Приведите определение l_temp
Приведите определение mnog
Приведите определение b
Приведите определение g_k
Приведите определение c

А лучше приведите готовый к компиляции код, на котором воспроизводится ошибка, чтобы людям, которые пожелают вам помочь было легче это делать.
Re[2]: Не пойму в чём дело:(
От: andrey.def Россия  
Дата: 08.04.05 19:10
Оценка:
Здравствуйте, korzhik, Вы писали:
K>А лучше приведите готовый к компиляции код, на котором воспроизводится ошибка, чтобы людям, которые пожелают вам помочь было легче это делать.
Вот это безобразие
#include <fstream.h>
#include <iostream.h>
#define reg_length 7
#define mnogochlen 3
#define dlina 60
int reg[reg_length]={1,2,3,0,3,1,2};
int st_razr[dlina];
int ml_razr[dlina];
int recur[dlina];
int c[dlina];
int b[dlina];
int g_k=4;
int mnog[reg_length]={1,0,0,1,0,0,0};
int reg_next()
{
return (reg[0]+reg[mnogochlen])%g_k;
}
int iter ()
{
int l_temp;
l_temp=reg_next();
for (int j=0;j<reg_length-1;j++)
reg[j]=reg[j+1];
reg[reg_length-1]=l_temp;
return l_temp;
}
int mod(int arg, int osn)
{
do
{
arg+=osn;
}
while (arg<0);
return arg%osn;
}
void calc_c()
{
int l_temp=0;
for(int h=0;h<reg_length;h++)
c[h]=0;
for(int w=0;w<(dlina+1-reg_length);w++)
{
for (int j=0;j<reg_length;j++)
l_temp+=mnog[j]*st_razr[w+j-1];
c[w+reg_length]=mod(st_razr[w+reg_length]-l_temp,2);
l_temp=0;
}
}
void calc_b()
{
int l_temp=0;
for(int h=0;h<reg_length;h++)
b[h]=0;
for(int w=0;w<(dlina+1-reg_length);w++)
{
if (w==53)
cout<<"!!";
for (int j=0;j<reg_length;j++)
l_temp+=mnog[j]*b[w+j-1];
b[w+reg_length]=g_k*c[w+reg_length]+l_temp;
l_temp=0;
}

}
void main ()
{
int next;
for(int h=0;h<reg_length;h++)
{
ml_razr[h]=0;
recur[h]=0;
st_razr[h]=0;
}
ofstream out ("out.txt");
for (int i=reg_length;i<dlina;i++)
{
next=iter();
ml_razr[i]=next%2;
st_razr[i]=(next-ml_razr[i])/2;
recur[i]=next;
}
calc_c();
calc_b();
for (i=0;i<dlina;i++)
out<<recur[i]<<" high:"<<st_razr[i]<<" low:"<<ml_razr[i]<<" shift:"<<c[i]<<" b: "<<b[i]<<endl;
}
Re[3]: Не пойму в чём дело:(
От: Анатолий Широков СССР  
Дата: 08.04.05 19:25
Оценка:
Ты выходишь за пределы массива b. Его длина 60, значит допустимыми индексами являются [0, 59]. А у тебя w+reg_length == 60 — в этот момент ты пишешь значение в ячейку 60, которая не принадлежит b.
Re[4]: Не пойму в чём дело:(
От: andrey.def Россия  
Дата: 08.04.05 19:30
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Ты выходишь за пределы массива b. Его длина 60, значит допустимыми индексами являются [0, 59]. А у тебя w+reg_length == 60 — в этот момент ты пишешь значение в ячейку 60, которая не принадлежит b.

Большое спасибо. Надеюсь, что таких глупых вопросов больше не повториться, по крайней мере сегодня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.