Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обращение по "космическому" адресу в C-программе.

69K
04 сентября 2016 года
hexter
14 / / 28.03.2016
Вот кусок программы, скомпилированной в MVS 2013.
Код:
#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;
};
вот во что превратилось условие:
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 года
69K
04 сентября 2016 года
hexter
14 / / 28.03.2016
Проблема решена.
7
06 сентября 2016 года
@pixo $oft
3.4K / / 20.09.2006
А поделиться решением с сообществом?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог