0

次のコードが変更関数で char** ポインターを必要とする理由を誰でも指摘できますか。char* を渡して、関数呼び出しが返されたら値を変更すると、k にガベージ値が含まれます。誰かがこれを正当化できますか?

char* call()
{
    return "fg";
}
void modify(char** i)
{
    *i = call();
}

int main()
{
    char* k= new char[3];
    modify(k);
}
4

1 に答える 1

5

関数に何かを渡すときは、値で渡します。これは、関数がそのもののコピーで動作することを意味します。

これはポインタにも当てはまります。を渡すとchar *、そのポインタのコピーが作成されます。元のポインターは変更されません。char **元のポインター自体を変更する場合は、引数を介してそのアドレスを渡す必要があります。


ノート:

1. コードにメモリ リークが含まれていることも指摘しておく必要があります。一部のメモリを動的に割り当てた後、そのメモリへのポインタを失います。つまり、メモリを決して割り当てることができませんdelete

2. C++ では、通常、このように生のポインターを渡すことは避けるべきです。これは苦痛と混乱を引き起こすためです。スマートポインターを調べる必要があります。

于 2012-04-09T17:37:14.113 に答える