Нарушение прав доступа при чтении

192
12 апреля 2017, 15:42

Помогите, я не могу найти ошибку уже очень давно!

  #include "head.h"
void main(){
    setlocale(LC_ALL,"rus");
    TCHAR str[100];
    int n, len, k, kol, kolStrok = 0;
    do{
    cout << L"Номер строки, которую нужно преобразовать: ";
    cin >> k;
    cout << L"Введите строку: "; 
    wcin >> str;
        cout << L"Количество буквенных латинских подстрок, которые удалось переставить в обратном порядке: " << kol 
            << endl 
            << L"Адрес строки: " << reversK(str, k, kol) << endl;
        if (kol > 0) 
            kolStrok++;
        cout << L"Количество измененных строк: " << kolStrok << endl;
    cout << endl << L"Повторить решение? (1 - да, 0 - нет): ";
    cin >> n;
    }while(n != 0);
}
#include "head.h"
void revers(TCHAR* str, int n){
    TCHAR hold;
    int i, j;
    TCHAR* p1 = str;
    for (i=0, j = n - 1; i < j; i++, j--){
        hold = *(str + j);
        *(str + j) = *(str + i);
        *(str + i) = hold;
    }
}
TCHAR* strAlfa(TCHAR* str, int& len) {
    len=0;
    //Поиск начала первой буквенной подстроки
    for (;!isAlfa(*str) && *str; str++);
    // Проверка на наличие буквенной подстроки
    if (*str==0)
        return 0;
    TCHAR* p = str;
    //Вычисление длины первой буквенной подстроки 
    for (; isAlfa(*str); str++, len++);
    return p;
}

int  isAlfa (TCHAR s){
    if (s>='a' && s<='z' || s>='A' && s<='Z'|| s>='а' && s<='я' || s>='А' && s<='Я')
        return 1;
    return 0;
}
TCHAR* reversK(TCHAR* str, int k , int& kol){
    int len;
    TCHAR* nextPart = str;
    kol = 0;
    int i = 1;
    for(int i = 1; nextPart = (strAlfa(nextPart, len)); i++, nextPart+=len){        
        if(i % k == 0){
            revers(nextPart, len);
            kol++;
        }
    }
    return ((kol > 0) ? nextPart : 0);
} 
#ifndef head_H
#define head_H
#include <iostream> 
#include<string.h>
using namespace std;

#ifdef UNICODE 
#define TCHAR wchar_t 
#define TEXT(p) L##p 
#define ostream wostream 
#define fstream wfstream 
#define cout wcout 
#define cin wcin 
#define setlocale _wsetlocale 
#define strcpy wcscpy 
#define strcmp wcscmp 
#else 
#define TCHARchar 
#define TEXT(p) p 
#endif
int  isAlfa (TCHAR s);
TCHAR* strAlfa(TCHAR* str, int& len);
void revers(TCHAR* str, int n);
TCHAR* reversK(TCHAR* str, int k , int& kol);
#endif
Answer 1

я точно сказать не могу, но очень настораживает следующее:

TCHAR* strAlfa(TCHAR* str, int& len) {
...
   if (*str==0)
      return 0; // может вернуть 0
...
}
TCHAR* reversK(TCHAR* str, int k , int& kol){
...
   for(int i = 1; nextPart = (strAlfa(nextPart, len)); i++, nextPart+=len){ 
...
return ((kol > 0) ? nextPart : 0); // т.е. тоже может вернуть 0!
}

и наконец в main()

cout << L"Количество буквенных латинских подстрок, которые удалось переставить в обратном порядке: " << kol 
        << endl 
        << L"Адрес строки: " << reversK(str, k, kol) << endl;

я не уверен что << reversK(str, k, kol) адекватно сможет вывести строку с адреса "0". Возможно тут бага порылась.

READ ALSO
Как узнать есть ли петля в графе?

Как узнать есть ли петля в графе?

Не знаю как решить ? Можете сказать как можно решить эту задачу ?

624
QEventLoop и async/await

QEventLoop и async/await

В своем проекте пытаюсь реализовать подобие механизма async/await операций на Qt c использование QEventLoopПриведу простейший пример окна с одной кнопкой,...

312
разработать класс для создания файла c++ [требует правки]

разработать класс для создания файла c++ [требует правки]

Разработать метод-член класса для нового файла, содержащего

251
Где можно скачать натренированный word2vec? [требует правки]

Где можно скачать натренированный word2vec? [требует правки]

Доброго дня! Есть где-нибудь в доступе готовый натренированный, например на twitter или дрсоцсетях, файл word2vec с векторами?

297