ちょっと、mallocでsizeof演算子を使用する際に問題があります。たとえば、follを参照してください。 ideone上malloc(sizeof(s))は、予想より少ないメモリを割り当てますか?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * copy(char *s)
{
char *t=malloc(sizeof(s));
char *ptr=s;
int i=0;
do
{
t[i++]=*ptr++;
}
while(*ptr!='\0');
return t;
}
int main()
{
char *s="hello adsjahsjkdhjkashdkjaskdasldjlasjdlajsdlkjaslkdjalsjdlasjdljasdljasdkljklsdjlasdsadasdasd";
char *b=copy(s);
printf("%s\n",b);
free(b);
return 0;
}
コード - 、それがエラーを与える: - :無料():無効次のサイズ(速い):0x09bcf008 * *
しかし *のglibcの ./progを検出私はmalloc(sizeof(s))をmalloc(strlen(s)+1)に置き換えて、プログラムは完璧に動作します。だから問題は何ですか? 注:これは私が別のコードで持っていた問題を示すために作成したちょっとしたプログラムです。
もし 'malloc' *が*要求されたものより少ない(* none *を除いて' NULL'を返す場合を除いて)割り当てを行うと、実装にバグが見つかりました - - おめでとう! –