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

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

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

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

24.09.2013, 15:35. Просмотров 533. Ответов 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);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2013, 15:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция возвращает структуру (C++):

Функция не возвращает в программу структуру 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; и...

Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. - C++
Нужно отредактировать структуру по выбору пользователя. Проблема заключается в создании функции. Подскажите, а лучше покажите, как...

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

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

Функция не возвращает значение - 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; ...

4
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.09.2013, 15:39 #2
У меня компилируется. Просто взял ваш код и вставил к себе в Builder XE.
Значит проблема где-то в проекте Вашей студии.
0
alsav22
5421 / 4816 / 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]);
    
}
0
Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 78
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).
0
alsav22
5421 / 4816 / 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. Потом делается попытка использования этого мусора. Отчего ошибка.
1
Миниатюры
Функция возвращает структуру  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2013, 13:07
Привет! Вот еще темы с ответами:

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

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

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

Функция не возвращает значение - 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; ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
25.09.2013, 13:07
Ответ Создать тему
Опции темы

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