3

このコードを見てください。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string hello = "Hello"
         , world = "World";

    const char *p = (hello+world).c_str();
    cout << "STRING: " << p <<endl;

    return 0;
}

私は評判がなく、画像を投稿できないので、手書きで結果を書きます。

= Visual Studio 2013 ver.12.0.30110.00

STRING: 

= Dev-C++ ver.4.9.9.2

STRING: HelloWorld

最初の以下は、Visual Studio によってコンパイルされた実行結果です。

2 つ目は、Dev-C++ によってコンパイルされます。

何がこの違いを生んでいるのだろうか。

お返事をお待ちしております。ありがとう :)

4

1 に答える 1

3

(hello+world).c_str()末尾の までのみ有効です;。その後のメモリへのアクセスは未定義の動作です。

Visual Studio はおそらく実際にメモリをクリアしますが、Dev-C++ は気にしません。Visual Studio (最適化をオン) でリリース バージョンをビルドしてみてください。おそらく同じ動作が見られるでしょう。

于 2014-04-25T08:26:07.717 に答える