malloc で sizeof 演算子を使用すると問題が発生します。たとえば、以下を参照してください。コード-
#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;
}
ideone では、次のエラーが表示されます:- * glibc が検出されました./prog: free(): 次のサイズが無効です (高速): 0x09bcf008 * *
しかし、 malloc(sizeof(s)) を malloc(strlen(s)+1) に置き換えると、プログラムは完全に機能します。だから問題は何ですか?注:これは、私が別のコードで抱えていた問題を示すために作成した小さなプログラムです。