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

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

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

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

24.09.2013, 15:35. Просмотров 489. Ответов 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++
Функция не возвращает в программу структуру C++ C++
C++ Функция возвращает объект
C++ Функция get() не возвращает значение
Функция не возвращает false C++
Функция возвращает auto C++
Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. C++
C++ Функция не возвращает значение
Функция не возвращает значение C++
Функция не возвращает значение C++
C++ Как функция возвращает указатель на структуру в массив указателей

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.09.2013, 15:39     Функция возвращает структуру #2
У меня компилируется. Просто взял ваш код и вставил к себе в Builder XE.
Значит проблема где-то в проекте Вашей студии.
alsav22
5413 / 4809 / 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
Сообщений: 71
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).
alsav22
5413 / 4809 / 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     Функция возвращает структуру
Ответ Создать тему
Опции темы

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