嘿,我有問題在malloc中使用sizeof運算符。例如參見下面的表格。代碼 -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;
}
上ideone,它給人的錯誤: - * glibc的檢測 ./prog:免費():無效的下一個尺寸(快速):0x09bcf008 * *
但是,當我用malloc(strlen(s)+1)替換malloc(sizeof(s)),程序完美運行。所以有什麼問題? 注意:這只是我創建的一個小程序,用於演示我在另一個代碼中遇到的問題。
如果'malloc' * ever *的分配小於請求的(除非* none *在這種情況下它將返回NULL),那麼你在實現中發現了一個錯誤 - - 恭喜! – 2012-04-13 21:22:06