Обращение по "космическому" адресу в C-программе.
Код:
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
using namespace std;
char a[1000000];
struct Bhor{
char ch;
Bhor* bh[10];
bool ac[10];
};
void newbh(Bhor* mBhor, char ch)
{
Bhor* bh = (Bhor*) malloc(sizeof(Bhor*));
bh->ch = ch;
ch -= 48;
mBhor->ac[ch] = 1;
mBhor->bh[ch] = bh;
};
bool findr(Bhor* Bh, int k, short lim, bool kjtmse)
{
if (k < lim){
k++;
if (!Bh->ac[a[k] - 48]){
newbh(Bh, a[k]);
kjtmse = 0;
findr(Bh->bh[a[k] - 48], k, lim, 0);
}
else findr(Bh->bh[a[k] - 48], k, lim, 1);
}
else return kjtmse;
return (bool)2;
};
#include <string.h>
#include <stdlib.h>
using namespace std;
char a[1000000];
struct Bhor{
char ch;
Bhor* bh[10];
bool ac[10];
};
void newbh(Bhor* mBhor, char ch)
{
Bhor* bh = (Bhor*) malloc(sizeof(Bhor*));
bh->ch = ch;
ch -= 48;
mBhor->ac[ch] = 1;
mBhor->bh[ch] = bh;
};
bool findr(Bhor* Bh, int k, short lim, bool kjtmse)
{
if (k < lim){
k++;
if (!Bh->ac[a[k] - 48]){
newbh(Bh, a[k]);
kjtmse = 0;
findr(Bh->bh[a[k] - 48], k, lim, 0);
}
else findr(Bh->bh[a[k] - 48], k, lim, 1);
}
else return kjtmse;
return (bool)2;
};
if (!Bh->ac[a[k] - 48]){
00D82C84 mov eax,dword ptr [k]
00D82C87 movsx ecx,byte ptr [eax+0D90368h]
00D82C8E mov edx,dword ptr [Bh] ; что это? почему это здесь? как это сюда попало?
00D82C91 movzx eax,byte ptr [edx+ecx-4]
00D82C96 test eax,eax
00D82C98 jne findr+8Fh (0D82CDFh)
Прошу показать, где я налажал? И при возможности ответить на указанные чуть выше вопросы. Заранее спасибо
- Bh = 0xcccccccc от hexter, 04 сентября 2016 года
Проблема решена.
А поделиться решением с сообществом?