-2

次のような C++ コードがあります。

static int* ArrayGenerator()
{
    int temp[1] = {9};
    return temp;
}

static int* ArrayGenerator(int i)
{
    //parameter is just for demonstration
    int temp[1] = {9};
    return temp;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int arr1[1] = {9};
    printf("arrays are %s equal\n\n", (memcmp(arr1, ArrayGenerator(), 1) == 0) ? "" : "not");
    printf("arrays are %s equal\n\n", (memcmp(arr1, ArrayGenerator(1), 1) == 0) ? "" : "not");
}

1 つ目は「等しい」と答え、2 つ目は「等しくない」と答えます。

どうしてこれなの?

4

1 に答える 1

0

関数からローカル ポインターを返すことはできません。関数から temp を返すと、スコープ外に渡され、メモリは無効になります。これにより、未定義の動作が発生します。すでにここで説明しました

于 2014-01-07T17:19:36.573 に答える