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

Подскажите как исправить ошибку - C++

Восстановить пароль Регистрация
 
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
18.05.2012, 23:16     Подскажите как исправить ошибку #1
Здравствуйте! Подскажите, как исправить ошибку при выполнении программы:
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
#include <iostream>
#include <stdarg.h>
using namespace std;
 
void fun(int n,...)
{
    char *str3 = new char[100];
    va_list mas;
    va_start(mas,n);
    if (n == 1)
    {
        str3 = va_arg(mas,char*);
        char *str4 = new char[100];
        for (int i = 0; i!=strlen(str3);i++)
        {
            str4[i] = str3[strlen(str3)-i];
        }
        cout << str4 << endl;
        delete[] str4;
    }
    else if (n == 2)
    {
        for (int i = 1; i <= n; i++)
        {
            str3 = va_arg(mas,char*);
            cout << strlen(str3) << " | " << str3[strlen(str3)-1] << endl;
        }
    }
    va_end(mas);
    delete[] str3;
}
 
void main()
{
    char str[] = "Hello";
    char str2[] = "Helllo world!";
 
    fun(2,str,str2);
    cout << endl;
    fun(1,str);
 
    int tt;
    cin >> tt;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.05.2012, 23:55     Подскажите как исправить ошибку #2
См. комментарии:
Цитата Сообщение от Helldrg Посмотреть сообщение
C++
1
2
3
4
for (int i = 0; i!=strlen(str3);i++)
 {
 str4[i] = str3[strlen(str3)-i];// при i равном 0, выход за границы массива str3
 }
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
19.05.2012, 00:20  [ТС]     Подскажите как исправить ошибку #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
C++
1
2
3
4
for (int i = 0; i!=strlen(str3);i++)
{
str4[i] = str3[strlen(str3)-i];// при i равном 0, выход за границы массива str3
}
Я попробывал поставить так но все равно ошибка вылазит:
C++
1
2
3
4
for (int i = 1; i!=strlen(str3);i++)
        {
            str4[i] = str3[strlen(str3)-i];
        }
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 00:42     Подскажите как исправить ошибку #4
Цитата Сообщение от Helldrg Посмотреть сообщение
Я попробывал поставить так но все равно ошибка вылазит:
см комментарии:

Цитата Сообщение от Helldrg Посмотреть сообщение
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
void fun(int n,...)
{
 char *str3 = new char[100]// выделяете память, указатель на выделенную память в переменной str3;
 va_list mas;
 va_start(mas,n);
 if (n == 1)
 {
 str3 = va_arg(mas,char*);// вот в этой строке Вы меняете значение str3 (str3 больше не указывает на выделенную ранее память)
 char *str4 = new char[100];
 for (int i = 0; i!=strlen(str3);i++)
 {
 str4[i] = str3[strlen(str3)-i];
 }
 cout << str4 << endl;
 delete[] str4;
 }
 else if (n == 2)
 {
 for (int i = 1; i <= n; i++)
 {
 str3 = va_arg(mas,char*);// и в этой строке Вы меняете значение str3 (str3 больше не указывает на выделенную ранее память)
 cout << strlen(str3) << " | " << str3[strlen(str3)-1] << endl;
 }
 }
 va_end(mas);
 delete[] str3;// пытаетесь освободить ранее выделенную память, но str3 указывает совсем на другое место.
}
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
19.05.2012, 00:59  [ТС]     Подскажите как исправить ошибку #5
Cпасибо, и еще почему у меня вот эта часть кода не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
if (n == 1)
{
str3 = va_arg(mas,char*);// вот в этой строке Вы меняете значение str3 (str3 больше не указывает на выделенную ранее память)
char *str4 = new char[100];
for (int i = 0; i!=strlen(str3);i++)
{
str4[i] = str3[strlen(str3)-i];
}
cout << str4 << endl;
delete[] str4;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 01:04     Подскажите как исправить ошибку #6
Цитата Сообщение от Helldrg Посмотреть сообщение
Cпасибо, и еще почему у меня вот эта часть кода не работает:
что именно не работает? Выдает ошибку или не еще что-то?
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
19.05.2012, 01:13  [ТС]     Подскажите как исправить ошибку #7
когда у меня выполняется вот эта функция у меня ничего не выводит программа:
Цитата Сообщение от Helldrg Посмотреть сообщение
fun(1,str);
А по идее должна слово на оборот вывести
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 01:21     Подскажите как исправить ошибку #8
Эту часть сделайте вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    if (n == 1)
    {
        str3 = va_arg(mas,char*);
        char *str4 = new char[100];
        for (int i = 0; i!=strlen(str3);i++)
        {
            str4[i] = str3[strlen(str3)-i-1];
        }
        str4[strlen(str3)]='\0';
        cout << str4 << endl;
        delete[] str4;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 01:25     Подскажите как исправить ошибку
Еще ссылки по теме:

Подскажите как исправить ошибку C++
Написала программу, выводит ошибку, подскажите как исправить C++
C++ Подскажите, как исправить 1 ошибку в программе?

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

Или воспользуйтесь поиском по форуму:
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
19.05.2012, 01:25  [ТС]     Подскажите как исправить ошибку #9
Спасибо большое!!!
Yandex
Объявления
19.05.2012, 01:25     Подскажите как исправить ошибку
Ответ Создать тему
Опции темы

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