1

私の知る限り、戻り型関数から受け取った値は、それが呼び出された場所に格納する必要があります。そうしないと、エラーになります。以下のコードがどのように機能するかを説明してください。

#include <iostream>
#include <stdlib.h>
#include<assert.h>
//Returns a pointer to the heap memory location which  stores the duplicate string
char* StringCopy(char* string) 
{                              
    long length=strlen(string) +1;
    char *newString;
    newString=(char*)malloc(sizeof(char)*length);
    assert(newString!=NULL);
    strcpy(newString,string);
    return(newString);
}
int main(int argc, const char * argv[])
{
    char name[30]="Kunal Shrivastava";
    StringCopy(name);   /* There is no error even when there is no pointer which 
                           stores the returned pointer value from the function 
                           StringCopy */
    return 0;
}

Xcodeでc++を使用しています。

ありがとうございました。

4

1 に答える 1

6

C++ では、関数呼び出し (またはその他の式) の結果を使用する必要はありません。

ダムポインタを動的メモリに返し、呼び出し元がそれを解放することを覚えていることを期待することによって潜在的に引き起こされるメモリリークを回避したい場合は、そうしないでください。動的リソースを自動的にクリーンアップするRAIIタイプを返します。この場合、std::string理想的です。適切なコンストラクターがあるため、関数を記述する必要さえありません。

一般に、C++ を作成している場合は C を作成しないでください。

于 2013-08-19T15:31:41.243 に答える