Любди, подскажите в чём проблема: при выполнении указанного ниже цикла в при 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;
}
ЗЫ: просьба не ругать, если чего не так С я немного подзабыл...
Спасибо за внимание.
Одно можно сказать точно — у тебя выход за пределы диапазона массива b — как результат — бъешь по чужой памяти. Более точно можно ответить, если ты приведешь реальный код с объявлением переменных.
Здравствуйте, 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
А лучше приведите готовый к компиляции код, на котором воспроизводится ошибка, чтобы людям, которые пожелают вам помочь было легче это делать.
Здравствуйте, 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;
}
Ты выходишь за пределы массива b. Его длина 60, значит допустимыми индексами являются [0, 59]. А у тебя w+reg_length == 60 — в этот момент ты пишешь значение в ячейку 60, которая не принадлежит b.
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Ты выходишь за пределы массива b. Его длина 60, значит допустимыми индексами являются [0, 59]. А у тебя w+reg_length == 60 — в этот момент ты пишешь значение в ячейку 60, которая не принадлежит b.
Большое спасибо. Надеюсь, что таких глупых вопросов больше не повториться, по крайней мере сегодня