私はC++を学びたいと思います。私の初心者の質問です。入れ子構造体についてC++
#include <iostream>
#include <string>
using std::cout;
using std::endl;
struct student{
struct address{
int no;
std::string city; //problem is here
};
char grade;
int num;
address *addr;
};
int main(){
student st1;
student *pSt1 = &st1;
pSt1->grade = 'A';
pSt1->num = 1234;
pSt1->addr->no = 123;
pSt1->addr->city = "Imladris";
return 0;
}
それはクラッシュしますが、私はこのようstd::string city
を変更した場合:
struct student{
struct address{
std::string city; // here
int no;
};
char grade;
int num;
address *addr;
};
それがクラッシュし、いずれの場合も0 ... んが、エラーや警告を返しません。 多分、ここでポインタを使う必要はありませんが、私が言ったように、私はC++を学んでいます。これはポインタ/構造体のサンプルコードです。
私はそれを修正する方法を知っていますが、なぜそれが壊れているのか理解したいと思います。私は文字列都市の宣言順序を変更し、クラッシュしません。どうして?
警告でコンパイルし、コンパイラを聞きます。 – Nelfeal
そして、「動作する」と「動作しない」という意味(コンパイルエラー、プログラムクラッシュ、予期しない結果など)を説明してください。 – SJuan76
「動作するかどうか」という意味は何ですか?私たちにコンパイラのエラーやsthを表示してください。 –