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

Нужен совет по исправлению ошибки в функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ перегрузка операторов http://www.cyberforum.ru/cpp-beginners/thread765682.html
на примере класса Line не получается правильно и без ошибок перегрузить следующие операторы ==, <, !=, <<. с = и вроде справился, с остальными пока проблемы, кому не сложно помогите плз #include <iostream> #include<string.h> using namespace std; class Line { private: int max_length;
C++ Консольное приложение Qt. Ругается на 3-й, 4-й аргументы Добрый день. При запуске в Qt вылетает Disassembler, окошко назначение Segmentation fault Фрагмент кода int main(int argc, char *argv) { ..... //параметры, которые введет пользователь int t,n,k; int res; http://www.cyberforum.ru/cpp-beginners/thread765669.html
Алгоритм нахождения цифрового корня натурального числа C++
хочу сделать проверку числа что бы выводилось сообщение при большем числе не получается :( void zadanie_3() { signed long n; clrscr(); cout<<"\n vvedite chislo: "; cin>>n; if(n<0)
как наносить етот код в class и как работать c class C++
#include<stdio.h> #include<stdlib.h> #include<string.h> #define uzunligi 1000 #include<iostream.h> #include<conio.h> using namespace std; char * multiply(char ,char);
C++ шаблоны, стек http://www.cyberforum.ru/cpp-beginners/thread765643.html
Почему при удалении элементов не корректно работает программа, а именно начинает удалять не с вершины а со следующего элемента? #include <iostream> #include <locale.h> #include "stack.h" using namespace std; int main() { setlocale(LC_ALL,"Ukrainian");
C++ Run-Time Check Failure - 2 Приветствую уважаемое сообщество. Подскажите мне, пожалуйста, чем может вызываться указанная в теме ошибка (с следующей расшифровкой: stack around the variable 'mybuf' was corrupted) в следующем коде: #include <stdio.h> #include <iostream> #include <windows.h> using namespace std; int main() { подробнее

Показать сообщение отдельно
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
18.01.2013, 23:20     Нужен совет по исправлению ошибки в функции
C++
1
2
3
4
5
6
persona::persona()
{
    name="Мазай";
    age=55;
    pol=true;
}
ответ: это ненормальный конструктор по умолчанию. Тема строковых литералов поднималась не раз на форуме, и вот: мы тоже на неё напоролись.
Вообще, наличие конструктора по умолчанию очень скользкая вещь. Иногда, если конструктор по-умолчанию отсутствует - это вызовет "полезную" ошибку компилятора, дающую нам знать, что где-то в программе создаётся не то, что нам надо. Но это лирика...
Ответ: в конструкторе persona :: persona() тоже надо выделять память под строку имени по всем правилам, а затем strcpy()-ровать

C++
1
2
3
4
5
6
7
persona::persona()
{ 
    name = new char[strlen("Мазай")+1];
    strcpy(name, "Мазай");
    age=55;
    pol=true;
}
Добавлено через 22 минуты
ещё
C++
1
2
3
4
void persona::setName(char *_name)
{
    name=_name;
}
Аналогично исправить на
C++
1
2
3
4
5
6
void persona::setName(char *_name)
{
    delete[] name;
    name = new char[strlen(_name)+1];
    strcpy(name, _name);
}
Ты уверен, что правильно понимаешь, зачем нужна функция strcpy()????
и в чём разница между name=_name; и strcpy(name, _name); ????
По-моему, ты плаваешь в указателях: повтори пожалуйста эту тему.

Добавлено через 2 минуты
А ещё тут по-хорошему не хватает конструктора копирования и оператора присвоения.
 
Текущее время: 19:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru