C ++ динамическое выделение памяти в стеке - PullRequest
0 голосов
/ 02 октября 2018

Когда мы динамически распределяем память из 5 элементов в куче, тогда почему она отображает более 5 элементов ???В этой программе я сделал указатель на символ str и дал динамическое распределение памяти, но когда он принимает размер динамической памяти, он отображает больше элементов, чем заданный размер. Например: -Если я дал 5-значный массив, он отображает больше, чем5 символов строки

#include<iostream>
#include<cstdlib>

using namespace std;

struct node
{
    int tos;
    int l;
    char *str;
};

class balancing
{
    struct node s;

public:
    balancing();
    balancing(int len);
    void balance();
};

balancing::balancing()
{
    s.tos=-1;
    s.l=0;
    s.str=NULL;
}

balancing::balancing(int le)
{
    s.l=le;
    s.str=new char[s.l];
    s.tos=-1;
}

void balancing::balance()
{
    int length;
    char ch1;
    cout<<"Enter the String"<<endl;
    cin>>s.str;
    cout<<s.str;
}

int main()
{    
    int len;
    cout<<"Enter the Length"<<endl;
    cin>>len;
    balancing b(len);
    b.balance();
    return 0;
}

1 Ответ

0 голосов
/ 02 октября 2018

Ваш вопрос сводится к,

char str[2]={'H','i'};
cout<<str; // why doesn't this print 2 characters?

Ответ таков: для того, чтобы использовать массив символов в качестве строки, он должен заканчиваться нулем.Любой код обработки строки, который ожидает нулевой символ, будет выполняться до тех пор, пока не найдет его (или не вызовет проблему, потому что он этого не сделал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...