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

Не могу найти ошибку в исходнике. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
lordPS
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 55
28.05.2012, 22:38     Не могу найти ошибку в исходнике. #1
Привет програмёры.Я учусь програмировать на С++ и для закрепления начала изучения функций и массивов написал небольшую програмку massiv, и она компилируется, но работает неправильно(после ввода чисел работа почемуто обрывается.Не могу найти ошибку.Вот текст програмки:

#include<cstdio>
#include<cstdlib>
#include<iostream>

using namespace std;


int Proizved(int mass[], int velechina);
void tabl(int mass[], int velechina);

int main(int nNumberofArgs, char*pszArgs[])
{
int accumulator;
int massiv[100];

int nom;

for(nom=0;nom < 100;nom++)
{
int chislo;
TCHAR * s1 = "Введите число: ";
TCHAR * s2 = new TCHAR(strlen(s1)+1);
CharToOem(s1,s2);
cout << s2;
cin >> chislo;
if(chislo < 0)
{
break;
}
massiv[nom]=chislo;
}
tabl(massiv,nom);

cout << "Proizvedenie:" <<Proizved(massiv,nom) << endl;

system("PAUSE");
return 0;
}


void tabl(int mass[], int velechina)
{
TCHAR * s3 = "В массиве находятся числа:";
TCHAR * s4 = new TCHAR(strlen(s3)+1);
CharToOem(s3, s4);
cout << s4;
for(int i=0;i < velechina; i++)
{
cout.width(3);
cout << i << ":" << mass[i] << endl;
}
cout << endl;
}


int Proizved(int mass[], int velechina)
{
int accumulator = 0;

for(int i = 0; i < velechina;i++)
{
accumulator += mass[i];
}
return accumulator;
}
Коментарии не - писал на 100% уверен что всё поймёте.Прошу с меня не ржать-всётаки только начал изучать С++ и 14 лет мне.
P.S: интереса ради пожалуйста напишите во сколько начали учиться програмировать и восколько
професионально програмировать.
GGGGGGGG-Unit
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 22:38     Не могу найти ошибку в исходнике.
Посмотрите здесь:

C++ не могу найти ошибку!!!
Не Могу найти ошибку C++
Не могу найти ошибку C++
не могу найти ошибку C++
Не могу найти ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
boombastik
6 / 6 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
29.05.2012, 03:25     Не могу найти ошибку в исходнике. #2
Попробовал выполнить программу, действительно валится при выводе массива введенных чисел.

Небольшие эксперименты показали, что проблема в выводе строки в std::cout, конвертированной при помощи CharToOem. Если строка превышает длинной 23 символа, то после функции CharToOem и вывода строки в std::cout последний становится не пригоден для использования.

Поздно уже думать сегодня ^_^ Поэтому, в качестве временного решения могу порекомендовать уменьшить сообщение до 23 символов или писать по-английски и не используй CharToOem вообще.

Удачи,
Владимир
arist
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 100
29.05.2012, 08:21     Не могу найти ошибку в исходнике. #3
вместо
TCHAR * s2 = new TCHAR(strlen(s1)+1);
должно быть
TCHAR * s2 = new TCHAR[strlen(s1)+1];

В первом случае выделяется память размером sizeof(TCHAR) и инициализированная значением strlen(s1)+1, а во втором (то, что нужно) выделяется память размером sizeof(TCHAR) * (strlen(s1)+1) и не инициализируется.

на счёт s4 - тоже самое.
lordPS
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 55
29.05.2012, 18:56  [ТС]     Не могу найти ошибку в исходнике. #4
Спасибо большое!Пограмка заработала.В принципе оба совета подходят но я
воспользовался вторым.Ещё раз спасибо, с меня пивоP.S:жаль на последний вопрос не ответили, создам отдельную тему в FLAME.
boombastik
6 / 6 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
30.05.2012, 12:20     Не могу найти ошибку в исходнике. #5
arist абсолютно прав, забудь мой предыдущий ответ, я чей-то просмотрел очевидную ошибку 23 символа тут ни при чем. Массивы нужно создавать как массивы, иначе программа начинает использовать область памяти выходящую за рамки выделенной.

Удачи,
Владимир
lordPS
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 55
30.05.2012, 15:36  [ТС]     Не могу найти ошибку в исходнике. #6
ОК.
Yandex
Объявления
30.05.2012, 15:36     Не могу найти ошибку в исходнике.
Ответ Создать тему
Опции темы

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