Ниже программа на С++ работает нормально, хотя я не выделил памяти для chr
. Я просмотрел google, SO и наткнулся на это Почему это преднамеренно неправильное использование strcpy не приводит к ужасным сбоям?
Здесь программа отлично работает для пункта назначения, который имеет меньше места, чем источник. Применимо ли это и к моему случаю, strcpy
записывает в случайное место в куче?
#include<iostream>
using namespace std;
class Mystring
{
char *chr;
int a;
public:
Mystring(){}
Mystring(char *str,int i);
void Display();
};
Mystring::Mystring(char *str, int i)
{
strcpy(chr,str);
a = i;
}
void Mystring::Display()
{
cout<<chr<<endl;
cout<<a<<endl;
}
int main()
{
Mystring a("Hello world",10);
a.Display();
return 0;
}
output:-
Hello world
10
Я попробовал то же самое с другой программой на С++, с любым классом и членом класса, и я смог увидеть сбой.
#include<iostream>
using namespace std;
int main()
{
char *src = "Hello world";
char *dst;
strcpy(dst,src);
cout<<dst<<endl;
return 0;
}
Пожалуйста, помогите мне понять поведение в первой программе на С++. Выделяется ли каким-то образом память или strcpy
пишет в какую-то случайную ячейку памяти.
chr
указывает только на это место? Пожалуйста, помогите мне понять это. - person Rndp13   schedule 24.06.2015Is it like writing into some random memory location?
Да. - person deviantfan   schedule 24.06.2015