堆栈中的c ++动态内存分配

时间:2018-10-02 18:27:52

标签: c++ memory-management

当我们在堆中动态分配5个元素的内存时,为什么它显示的元素超过5个? 在此程序中,我已将char指针赋予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 :(得分:0)

您的问题可以归结为

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

答案是因为要使用字符数组作为字符串,必须以null结尾。任何期望空字符的字符串处理代码都将继续进行,直到找到一个(或由于未找到而导致问题)。