487 / 365 / 94
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
1

Интерфейс с С++: путаница с адресами

19.12.2011, 01:41. Показов 714. Ответов 4
Метки нет (Все метки)

Задача: сделать процедуру со свистелками. вызывать её как функцию C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdio.h"
#include "string.h"
#include "conio.h"
 
extern "C" void _stdcall CUT_END(char A1[]);
 
void main()
{
    char * s = new char;
 
 
    printf("Write you string: \n");
    scanf("%s",s);
    CUT_END(s);
    printf("\nYour string:\n%s", s);
    _getch();
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.386
.MODEL FLAT
.DATA
.CODE
_CUT_END@4  PROC
            PUSH EBP
            MOV EBP, ESP
            MOV EDI, [EBP+8]
 
;----------Старый код---------
            mov     ecx, 1024
            mov     al, [edi]
            mov     al, 0
            repne   scasb
            
            sub     ecx, 1024
            neg     ecx
            dec     ecx     
            cmp     ecx,0
            jle     en
            mov     al, [edi]
            dec     edi
            mov     esi, edi
            dec     edi 
            mov     al, [edi]
            
            std 
            mov     al, ' '
            repe    scasb
            cld 
            mov     ecx, 1
            rep     movsb
        en: 
;-------Конец старого кода----------
 
            mov esi, [ebp+8]
            POP ebp
            ret
_CUT_END@4  ENDP
END
принтф выдаёт ошибку, мол, я память меняю жоско
Bash
1
Необработанное исключение в "0x00773be0" в "asm2.exe": 0xC0000005: Access violation.
что не верно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2011, 01:41
Ответы с готовыми решениями:

Путаница с адресами
Здравствуйте. Раньше, я так понял, на "голубом фоне" (Изображение) отображались адреса памяти...

путаница с ОС
Совсем запутался весь. Помогите решить проблему. Значит стояла 7, решил установить себе еще XP, на...

Путаница в цикле
Добрый вечер. Есть xml (приблизительно): <root> <root1> ... <subroot1>text</subroot1> ......

Путаница в новостях
При переходе по ссылке Владислав Сурков из новостей появляется очень необычное описание:...

4
Клюг
7670 / 3185 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
19.12.2011, 02:01 2
extern "C" void _stdcall CUT_END(char A1[]);
C
1
extern CUT_END(char *A1);
0
487 / 365 / 94
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
19.12.2011, 07:40  [ТС] 3
Увы, нет. Не помогло.

Плюс. Как вы понимаете, это лаба с обязательным критерием, мой - __stdcall.
Плюс. У меня, походу, ошибка в причинном месте - возвращении данных. Но в паре книжек я увидел очень сходный код, и там всё ОК, а VS не даёт такого простора отладки, как хочется...
Плюс. Я не могу отредактировать свой пост(((((
0
Клюг
7670 / 3185 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
19.12.2011, 15:01 4
Не помогло.
Никто и не сказал, что будет легко. Hочью просто проглядел:
char * s = new char;
Вы сколько памяти в хипе выделяете? Байт? А в АСМе, судя по
Assembler
1
mov             ecx, 1024
хотите килобайт.
А __stdcall в прототипе ф-ции пропишите, если препод требует. Он всё равно по-умолчанию.
0
487 / 365 / 94
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
19.12.2011, 17:30  [ТС] 5
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Никто и не сказал, что будет легко. Hочью просто проглядел:

Вы сколько памяти в хипе выделяете? Байт? А в АСМе, судя по
Assembler
1
mov             ecx, 1024
хотите килобайт.
Ну, в идеале да, но
C++
1
char *s = new char [1024]
не помогло.
Да и вообще, технически я имею право на килобайт. Другое дело, что там уже кто-то может быть)))
Тем более, scanf получает строку, которую я уменьшаю... не думаю, что кого-то перезапишу...
Цитата Сообщение от Charles Kludge Посмотреть сообщение
А __stdcall в прототипе ф-ции пропишите, если препод требует. Он всё равно по-умолчанию.
Круто. Но нет. я же не сказал, что не могу получить адрес или опустошить стек - я конкретно не тот адрес возвращал. Могли бы и сказать, мол, учи матчасть - возвращаемое значение в eax валяться должно!!1! Короче,
Assembler
1
2
mov eax, esi
ret 4
и дело в шляпе. Всем спасибо за внимание, закрыто.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2011, 17:30

Путаница с указателями
#include <stdio.h> #include <stdlib.h> #define LEN 100 void new_line(char (**line), int n) {...

Путаница в кавычках
while($rows = mysql_fetch_array($result)) { $i=$i+1; echo '<input type="checkbox"...

Путаница с разделами
Такая проблема. В компе один жёсткий диск типа HDD. Раньше можно было жёсткий диск разбивать...

Путаница с weak_ptr
Есть класс Сущности и класс Компонента, необходимо сделать так, чтобы у каждой сущности были свои...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.