Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2014, 22:03   #1
nick999
 
Регистрация: 02.03.2014
Сообщений: 4
Восклицание C++ ошибка по адресу

Необработанное исключение по адресу 0x009D4B01 в ConsoleApplication6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

По программе - требуется переставить в строках (их 3) самое длинное и самое короткое слово. С одной строкой получалось, работало, а сейчас какой-то косяк. Помогите, пожалуйста, уже ни один день бьюсь с этой проблемой...

Код:
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include <iostream>
#include "locale.h"
#include <string>
 
using namespace std;
 
 
 
int main() 
{
    setlocale(0, "russian");
    int i, x[3] = {1,1,1}, y[3] = {1,1,1}, l[3] = {1,1,1}, q[3] = {1,1,1}, j = 0, minlen[3] = {100,100,100}, maxlen[3] = {0,0,0}, len;
    char str[3][200] = {0}, str1[3][200], *str2;
    char *strs[3][200];
    
    for (i = 0; i < 3; i ++) 
    {
        cout << "Введите строку № " << i + 1 << endl;
        gets(str[i]);
        strcpy(str1[i], str[i]);
    }
    
    char *px;
    i = 0;
    j = 0;
 
    for (i = 0; i < 3; i ++)
    {
        px = strtok (str[i] , " " );
        maxlen[i] = strlen(px);
        while(px)
            {
                len = strlen(px);
                if (maxlen[i] < len) 
                {
                    x[i]=y[i];
                }
                if (minlen[i] > len) 
                {
                    minlen[i] = len ; l[i]=y[i];
                }
            px = strtok(NULL, " ");
            y[i] ++;
            j ++;
            }
        
        }
        
 
    j = 0;
    char *ptok[3];
 
    for (i = 0 ; i < 3; i ++)
    {
        ptok[i] = strtok(str1[i], " ");
        while (ptok[i])
        {
            strs[i][j++] = ptok[i];
            ptok[i] = strtok ( NULL, " ");
        }
    }
 
    cout << endl;
 
    for (i = 0; i < 3; i ++)
    {
        cout << "Позиция самого длинного слова - " << x[i] << endl;
        cout << "Позиция самого короткого слова - "<< l[i] << endl << endl;
    }
 
    for (i = 0; i < 3; i ++)
    {
        x[i] --; l[i] --;
    }
 
    cout << "Строка, с перестановкой самого длинного и самого короткого слова:" << endl;
 
    for (i = 0; i < 3; i ++)
    {
        swap(strs[i][x[i]], strs[i][l[i]]);
    }
 
    i = 0;
    j = 0;

    for (i = 0 ; i < 3; i ++)
    {
        while (strs[i]!=0)
        {
            cout << strs[i][j++]<< " ";
        }
        cout << endl;
    }
 
    getch();
    return 0;
 
}
Выдает эту ошибку, но в консольном окне выводить ПРАВИЛЬНЫЕ позиции слов и результат перестановки ТОЛЬКО ПЕРВОЙ СТРОКИ.
Кажется проблема с выделением памяти... Помогите пожалуйста, пробовал выделять, но видимо криво получилось

Последний раз редактировалось nick999; 07.04.2014 в 22:08.
nick999 вне форума Ответить с цитированием
Старый 07.04.2014, 23:15   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Указатели есть, а память кто выделять будет?
p51x вне форума Ответить с цитированием
Старый 07.04.2014, 23:46   #3
nick999
 
Регистрация: 02.03.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Указатели есть, а память кто выделять будет?
т.е

Код:
char ***strs;
strs = (char***)malloc(3*sizeof(char**));

for (i = 0 ; i < 3; i ++)
	{
		strs[i] = (char**)malloc(50*sizeof(char*));
		ptok = strtok(str1[i], " ");
		while (ptok)
		{
			strs[i][j++] = (char*)malloc(200*sizeof(char));
			strs[i][j++] = ptok;
			ptok = strtok ( NULL, " ");
			
		}
	}
вот так изменить? но все равно ругается и выводить билеберду
nick999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение к какому адресу MaximusPrime Visual C++ 1 10.10.2011 15:16
ошибка приложения инструкция по адресу "0х00400000" обратилась к памяти по адресу "0х00400000". Память не может быть "wr sanalia Помощь студентам 0 30.09.2011 22:20
Ошибка: Доступ не к тому адресу CodeNOT Общие вопросы C/C++ 1 04.01.2011 11:58
Вызов функции по её адресу nowaalex Общие вопросы C/C++ 5 22.08.2010 19:18
Ошибка: "Инструкция по адресу ...." Ronni10 Операционные системы общие вопросы 1 03.01.2008 21:49