【发布时间】:2012-04-13 21:10:04
【问题描述】:
嘿,我在 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(): invalid next size (fast): 0x09bcf008 **
但是当我用 malloc(strlen(s)+1) 替换 malloc(sizeof(s)) 时,程序运行良好。所以有什么问题? 注意:这只是我创建的一个小程序,用于演示我在另一个代码中遇到的问题。
【问题讨论】:
-
如果
mallocever 分配的数量少于请求的数量(none 除外,在这种情况下它将返回NULL),那么您已经找到实现中的一个错误——恭喜!