求一古老指针问题
void test4()
{
int i;
char **p = (char**)malloc(1000);
int sum = 0;
for(i=0; i<50; i++)
{
p[i] = (char *)malloc(i+1);
printf("p[%d]:%d\n", i, strlen(p[i]));
sum +=strlen(p[i]);
}
printf("sum: %d\n", sum);
for(i=0; i<50; i++)
free(p[i]);
}
int main(void)
{
test4();
return 0;
}
为什么将char **p = (char**)malloc(1000);里的1000改为其他值,分配的空间会不一样,想用二维指针为每分配不连续的空间,想得到这样的结果:p[0] : 1 p[1] : 2 p[2] = 3……
不知哪里出错了,求大拿。。。 二维指针 strlen
[解决办法]
哪里不一样呢?
p[i] = (char *)malloc(i+1);
//这里没有清空或者赋值,直接strlen是得不到正确的长度的!
printf("p[%d]:%d\n", i, strlen(p[i]));
[解决办法]
strlen是计算到第一个'\0'的位置的,你没有指定'\0'在哪里,所以取得的长度是不对的,甚至会超过数组分配的长度所以就错了。
计算内存分配的大小应该用其他方法,改成这种就OK了:
printf("p[%d]:%d\n", i, _msize(p[i])/sizeof(char));