これは学校のC課題ですが、私はそれが正常かどうかわからないという奇妙なことにぶつかっています。は、Mallocがより多くのメモリを割り当てる必要がありますか?
は、私は、コマンドライン引数を取らなければならないと1の例では、malloc
char *fileName = NULL;
fileName = malloc(strlen(argv[i]) * sizeof(char));
//error testing etc
strcpy(fileName, argv[i]);
と
ので、私のプログラムの中に私が動的に割り当てるメモリ
-ia.bですうまく動作しますが、私はビジュアルスタジオデバッガを介してメモリを調べます。これはメモリ位置に割り当てられるものです。必要に応じて:
0x01608b98 "ÍÍÍÍÍýýýýB`\x1˜?`\x1\xf1¼O{º"
私は、そのようなので、
fileName = (char*)malloc(strlen(argv[i]) * sizeof(char));
としてmalloc関数をキャストした場合、私は、このメモリに割り当てられます:0x009d8d38 "ÍÍÍÍÍýýýýB"
私の引数が5バイトであることを考慮すると、malloc関数は、より多くのメモリを割り当てて、それがすべきかだ私はこれを間違って行うだけですか?
あなたが求めている以上に多くを割り当てます。しかし、私はどのくらい割り当てられているかをどのように決定するかについては明確ではありません。 –
はい、malloc実装では、内部使用を要求するよりも多くのメモリを割り当てることがよくあります。 – d3L
おそらく。しかし、** strlen(argv [i]) 'は'(strlen(argv [i])+ 1) 'にする必要があるため、割り当てられたメモリが正確でない不足**からあなたを保護しませんそれに続く 'strcpy'のターミネータ。 –