私はC++を起動していると私は私のコードがどのように機能するかを理解することはできません。C++のメモリ割り当てHOWTO
[OK]を私はメモリを割り当てますが、割り当て誰の時に割り当てられるメモリのサイズを知っています。しかし、コードはまだ動作します。 どのくらいのメモリが割り当てられていますか?どのくらいのメモリが必要ですか?
EDIT:私の質問は明確ではなかった場合
申し訳ありません。それを明確にしてみてください。だから私は動的に私のポインタを使ってヒープ内のいくつかのメモリを割り当てます。しかし、スティング変数にはテキストがないので、私はgetline経由で入力するテキスト(バイト)の量を知ることはかなり難しいと思っています。
2つの異なるテキストリテラルのサイズを尋ねてみましたが、サイズはそれぞれ異なります。
sizeof("") // is 1 (because of the ending 0 maybe?)
sizeof("sometext") // is 9
しかし、文字列の場合、sizeofは私に両方の時間を与えます。 sizeof()が文字列を指すポインタの長さを与えることは明らかです。
どのようにしてメモリを割り当てることができますか?新しい文字列にメモリを割り当てると、文字列の最初の文字のメモリアドレスを指すポインタにのみ割り当てられますか?明らかに私が入力する文字は、どこかに格納しなければなりません。そして私は最初にメモリを割り当ててから、テキストを読み込みます。
編集2:プレーンテキストではなく、コードを編集するように編集したコードを作成します。
//Edit:
string a,b = "sometext";
cout << sizeof(a) << endl; //4
cout << sizeof(b); //4
//--------------------------------------------------------
#include <iostream>
#include <string>
#include <exception>
using namespace std;
int main()
{
//Defining struct
struct musicCD
{
string artist, title; // artist of the CD
};
//Memory allocation
musicCD *ptr;
try{ptr = new musicCD;}
catch(bad_alloc){cerr << "Out of memory :(";return -1;}
catch(...){cerr << "Something bad happened :O !";return -1;
}
//Get the data to store:
cout << "Please enter the data for the CD!' " << endl;
cout << "Please enter the artist: ";getline(cin, ptr->artist); cout << endl;
//Write out the data
cout << "The data entered: " << endl;
cout << "The artist performing is: \t" << ptr->artist << endl;
delete ptr;
return 0;
}
「あなたは割り当てられたメモリのサイズを知っている人はいません」と信じるようになったのは何ですか?それは非常に明白です。 'musicCd'オブジェクトの1つのインスタンスに対する十分なメモリが必要でした。割り当てられた後、割り当てが解除されました。 –
_誰も、割り当てられるメモリのサイズを知っていません。そうではありません。 'musicCD'は固定サイズです(サイズを見るには' sizeof'を使います)。 –
私は標準的な考えを信じていませんが、音楽CDのサイズは新しく決められています。サイズを得るための標準的な操作があります。例えば、 'sizeof(musicCD)' – George