次のコードが変更関数で char** ポインターを必要とする理由を誰でも指摘できますか。char* を渡して、関数呼び出しが返されたら値を変更すると、k にガベージ値が含まれます。誰かがこれを正当化できますか?
char* call()
{
return "fg";
}
void modify(char** i)
{
*i = call();
}
int main()
{
char* k= new char[3];
modify(k);
}
関数に何かを渡すときは、値で渡します。これは、関数がそのもののコピーで動作することを意味します。
これはポインタにも当てはまります。を渡すとchar *
、そのポインタのコピーが作成されます。元のポインターは変更されません。char **
元のポインター自体を変更する場合は、引数を介してそのアドレスを渡す必要があります。
ノート:
1. コードにメモリ リークが含まれていることも指摘しておく必要があります。一部のメモリを動的に割り当てた後、そのメモリへのポインタを失います。つまり、メモリを決して割り当てることができませんdelete
。
2. C++ では、通常、このように生のポインターを渡すことは避けるべきです。これは苦痛と混乱を引き起こすためです。スマートポインターを調べる必要があります。