关于林锐高质量编程的一个修正

zf0579 2003-06-03 12:21:00
这段时间用C++编写二维数组小程序。对照林书,觉得其第七章内存管理的例子有些小问题,现举例如下。
//(1)
void func4(char **p, int no)
{
for (int i = 0; i < no; i++)
{
p[i] = (char *) new char [20];
sprintf(p[i], "this is test4 %i", i);
}
}
//(2)
void func0(char* &p)
{
p = (char *) new char [20];
sprintf(p, "this is test0");
}
在林书中采用了第一种方式返回在函数中分配的内存,但是就如上程序中可以看出,对其操作可以对指针p[0]到p[no-1]分配内存,不受限制,只要no取得足够大。
而第二种方式就不允许这么做,看作者原书含义,应该采用第二种方式在函数中分配内存更为贴切,第一种方式虽然也没错。
...全文
15 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zf0579 2003-06-03
  • 打赏
  • 举报
回复
to brucegong:
有何经不起推敲的?请明示
brucegong 2003-06-03
  • 打赏
  • 举报
回复




上述的第一段代码经不起推敲






ovisa 2003-06-03
  • 打赏
  • 举报
回复
有点道理,好像作者的本意应该是这样的
brucegong 2003-06-03
  • 打赏
  • 举报
回复





回复人: zf0579(楚风萧萧) ( ) 信誉:100

如果所有的安全性都需要调用者来保证,这是不合理的。

调用者是应该注意,但是……如果他万一不注意的话就看这系统崩溃吗?如果调用者没有分配空间……这样的问题好像一般的自动化查错程序检查不出来的……如果不是完全的人工操作,等着死吧

不知道贝尔的人是不是这样写代码的,反正这样的代码绝对不合适




danielzhu 2003-06-03
  • 打赏
  • 举报
回复
读过这本书,写的就是好
zf0579 2003-06-03
  • 打赏
  • 举报
回复
to brucegong:那是调用函数时需要注意的 不是函数本身的问题吧
调用时可以这样使用 char *p4[20]; func4(p4, 10);
brucegong 2003-06-03
  • 打赏
  • 举报
回复





P是一个指向指针数组的指针,呵呵……如果它为空指针,怎么样??




69,371

社区成员

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

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