Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 74
#1

Функция возвращает структуру - C++

24.09.2013, 15:35. Просмотров 505. Ответов 4
Метки нет (Все метки)

Всем привет. Есть код взят из книжки "С++ 2008 для начинающих", ошибок при проверке не выдает , но при отдалке пишет: нет прав на чтение. Раньше таких ошибок то и не было.У меня Microsoft Visual C++ 2010.Кто знает в чем проблема, помогите пожалуйста.

C++
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <stdio.h>//ввод, вывод
#include <conio.h>//_getch()
#include <stdlib.h> //atoi()
#include <string.h>//strcmp()
#include <malloc.h>//malloc()
#define eof -1
#define maxline 1000
int getline(char s[],int lim)
{
    int c,i;
    for(i=0;(c=getchar())!= eof && i<lim-1 && c!='\n';i++)
        s[i]=c;
        s[i]='\0';
        i++;
return(i);
}
struct key
{
    char *keyword;
    int keycount;
 
} tab[]={"break",0,
         "case",0,
         "char",0,
         "continue",0,
         "end",0},bbb;
struct key BinaryInStruc(char *word,struct key tab[],int n)
{
    int low,high,mid,cond;
    low=0;
    high=n-1;
    while(low<= high)
    {
        mid=(low+high)/2;
        if((cond=strcmp(word,tab[mid].keyword))<0)
            high=mid-1;
        if(cond<0)
        {
       high=mid-1;continue;
        }
        if(cond>0)
        {
            low=mid+1;continue;
        }
        tab[mid].keycount=0;
        return(tab[mid]);
    }
    }
int _tmain()
{
    char s[maxline];
    int c;
    do
    {
        printf("Enter your new string >");
        getline(s,maxline);
        bbb=BinaryInStruc(s,tab,5);
        if(bbb.keycount!= -1)
            printf("Found string= %s\n",bbb.keyword);
        else
            printf("not found\n");
    }
    while((c=getchar()) !=eof)
        ;   
}
Вылетает с ошибкой на строке - printf("Found string= %s\n",bbb.keyword);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2013, 15:35     Функция возвращает структуру
Посмотрите здесь:

Функция не возвращает в программу структуру C++ - C++
Здравствуйте. Есть такой код: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; struct ABC { ...

Как функция возвращает указатель на структуру в массив указателей - C++
Друзья, следующий вопрос, у меня есть функция, которая: создает указатель на структуру-&gt; выделяет память-&gt; заполняет из файла-&gt; и...

Функция не возвращает значение - C++
Функция ничего не возвращает: int Return(int s) { return s; } Передаю в аргумент S целочисленную переменную, но результата в...

Функция возвращает auto - C++
В настройках ставлю галочку Have g++ follow the C++11 ISO C++ language standard Но все равно не компилится. template&lt;typename...

Функция не возвращает значение - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int ca(int a) { int i,r; r = 0; ...

Функция не возвращает результат=( - C++
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса: numb numb::operator +(const numb &amp;p)const { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.09.2013, 15:39     Функция возвращает структуру #2
У меня компилируется. Просто взял ваш код и вставил к себе в Builder XE.
Значит проблема где-то в проекте Вашей студии.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.09.2013, 16:26     Функция возвращает структуру #3
У вас возврат из BinaryInStruc() где-то не там сделан (или не так).

Добавлено через 2 минуты
Может так?
C++
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
struct key BinaryInStruc(char *word, struct key tab[], int n)
{
    int low, high, mid, cond;
    low = 0;
    high = n - 1;
    while(low <= high)
    {
        mid = (low + high) / 2;
        if((cond = strcmp(word, tab[mid].keyword)) < 0)
            high = mid - 1;
        if(cond < 0)
        {
            high = mid - 1;
            continue;
        }
        if(cond > 0)
        {
            low = mid + 1;
            continue;
        }
     }
     tab[mid].keycount = 0;
     return(tab[mid]);
    
}
Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 74
25.09.2013, 04:34  [ТС]     Функция возвращает структуру #4
Цитата Сообщение от Rivory Посмотреть сообщение
У меня компилируется. Просто взял ваш код и вставил к себе в Builder XE.
Значит проблема где-то в проекте Вашей студии.
Это мне кажется ближе к правде, если уже на недостаток прав ругается

Добавлено через 15 минут
Полное так скажем ругательство :


Первый этап обработки исключения в "0x5aec20a7 (msvcr100d.dll)" в "FuncVozvStruct.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000005".
Необработанное исключение в "0x5aec20a7 (msvcr100d.dll)" в "FuncVozvStruct.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000005".
Программа "[62868] FuncVozvStruct.exe: Машинный код" завершилась с кодом -1073741819 (0xc0000005).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2013, 13:07     Функция возвращает структуру
Еще ссылки по теме:

Функция не возвращает значение - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &quot;stdafx.h&quot; using namespace std; const int max_size = 100; ...

Функция возвращает объект - C++
Доброго времени суток! Как сделать, чтобы функция возвращала объект, ну или указатель на объект. Использую так: Image-&gt;Picture...

Функция возвращает массив - C++
Как сделать чтобы функция возвращала массив(не исползуя указатели):(. К присмеру: ... char v; // //заполнение массива // ...

Функция не возвращает false - C++
Вообщем str это строка, которая может содержать в себе знак математической операции, скобки, число (например 1, 5, 556, 33 ..) и т.д. ...

Функция get() не возвращает значение - C++
Есть класс, в котором определен объект типа SDL_Surface*. Пытаюсь передать его в сторонний класс с помощью метода getScreen(), но он по...

Что возвращает функция size()? - C++
что выполняет функция size() не могу найти кто знает скажите плиз


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2013, 13:07     Функция возвращает структуру #5
Когда ваш код компилируется, то компилятор выдаёт предупреждение:
warning C4715: BinaryInStruc: значение возвращается не при всех путях выполнения
Поставьте в конце этой функции вывод, чтобы посмотреть, где происходит возврат из неё:
C++
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//#include "stdafx.h"
#include <stdio.h>//ввод, вывод
#include <conio.h>//_getch()
#include <stdlib.h> //atoi()
#include <string.h>//strcmp()
#include <malloc.h>//malloc()
#define eof -1
#define maxline 1000
int getline(char s[],int lim)
{
    int c,i;
    for(i=0;(c=getchar())!= eof && i<lim-1 && c!='\n';i++)
        s[i]=c;
        s[i]='\0';
        i++;
return(i);
}
struct key
{
    char *keyword;
    int keycount;
 
} tab[]={"break",0,
         "case",0,
         "char",0,
         "continue",0,
         "end",0},bbb;
struct key BinaryInStruc(char *word,struct key tab[],int n)
{
    int low,high,mid,cond;
    low=0;
    high=n-1;
    while(low<= high)
    {
        mid=(low+high)/2;
        if((cond=strcmp(word,tab[mid].keyword))<0)
            high=mid-1;
        if(cond<0)
        {
       high=mid-1;continue;
        }
        if(cond>0)
        {
            low=mid+1;continue;
        }
        tab[mid].keycount=0;
        return(tab[mid]);
    }
    
    printf("Return");
}
 
 
int main()
{
    char s[maxline];
    int c;
    do
    {
        printf("Enter your new string >");
        getline(s,maxline);
        bbb=BinaryInStruc(s,tab,5);
        if(bbb.keycount!= -1)
            printf("Found string= %s\n",bbb.keyword);
        else
            printf("not found\n");
    }
    while((c=getchar()) !=eof); 
 
    return 0;
}
Из скрина видно, что возврат происходит совсем не там, где рассчитывалось. Возвращается некий мусор, который присваивается bbb. Потом делается попытка использования этого мусора. Отчего ошибка.
Миниатюры
Функция возвращает структуру  
Yandex
Объявления
25.09.2013, 13:07     Функция возвращает структуру
Ответ Создать тему
Опции темы

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