奇怪今天写了一个函数里面有指针的指针,修改了一下竟然报错

raygts 2006-04-13 03:54:04
函数:
int str(char *s,char *n,char *p)
{
char **ptr = NULL;
ptr = (char**)malloc(sizeof(char **) * strlen(s) * strlen(n),strlen(p));
//就是这样分配内存下面的指针付值就产生溢出,很奇怪!

ptr[0] = s;//溢出
ptr[1]=n;//溢出
ptr[2] =p; //溢出


}
只要把ptr = (char**)malloc(sizeof(char **) * strlen(s) * strlen(n),strlen(p));这句改过来就不会有问题了!
搞不懂,这样分配内存空间有什么问题!!
...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsygr520yy 2006-04-14
  • 打赏
  • 举报
回复
楼上正解。

看侯捷的书吧
jixingzhong 2006-04-13
  • 打赏
  • 举报
回复
ptr = (char**)malloc(sizeof(char **) * strlen(s) * strlen(n),strlen(p));
====================================
sizeof(char **) 和 sizeof(char *)一样,这个倒是问题不大,
但是,
最后的参数 strlen(p) ....

楼主,
数组在作为参数传递之后,
是不能获得数组长度的 ...

strlen(p) 只能得到 数组名退化后的指针 p的长度,
而不是预期的数组的长度 ...
ChenSu2008 2006-04-13
  • 打赏
  • 举报
回复
sizeof(char *)和sizeof(char **)都是一个地址的字节的长度
结果是一样的,不过逻辑上应该使用sizeof(char *)
xombat 2006-04-13
  • 打赏
  • 举报
回复
ptr[0] = s; //溢出
ptr[1] = n; //溢出
ptr[2] = p; //溢出
由于每个元素都是指向一个字符,所以分配时应该分配成sizeof(char *)而不是sizeof(char **),其他没有什么问题,另外如果你传给函数参数s,n或p的字符的长度为0(不包括'\0'),则也会产生溢出。
寻开心 2006-04-13
  • 打赏
  • 举报
回复
如果只是把ptr做char* 数组,长度是3的话应该是这样写
ptr = (char**)malloc(sizeof(char *) * 3);
ChenSu2008 2006-04-13
  • 打赏
  • 举报
回复
不太清楚lz的意思
ptr = (char**)malloc(sizeof(char **) * 3);这句话足以
这个函数里面只不过需要一个指针数组而已,所以申请三个空间就可以了
lz的malloc里有两个参数是通不过编译的吧。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧