中兴笔试问题指针出错

时间:2020-11-28 10:31:35 笔试题目 我要投稿

中兴笔试问题指针出错

   中兴笔试问题指针出错,请指出这个程序里的不正确的地方

中兴笔试问题指针出错

  char *getString()

  {

  return (char*)malloc(800);

  }

  int main()

  {

  char *str;

  str = getString();

  pintf("%s",str);

  return 0;

  }

  原来的参考答案:

  错误在于:

  在前面的函数中。malloc分出来的空间被放在了一个栈上面

  主函数使用了这个函数后操作系统后弹出栈顶

  也就是这块空间被shi放了(9分)

  后面那个printf打印的本来是指向栈顶的那个地址的。。

  但现在弹出了

  所以不知道指到哪里去了

  也不会得到自己想要的打印结果(9分)

  个人认为:

  这个根本就不是在栈上,而是在推上,用函数返回堆的地址,这是很常见的做法啊,大家可以参照高质量编程。

  这个我觉得不会是中兴给的'答案吧

  感觉太水了。不知道大家看出来多少?

  你的想法是正确的。

  在一个函数中malloc一段内存,供另一个函数使用,没有任何问题。

  msdn原文如下:

  void *malloc(size_t size );

  malloc returns a void pointer to the allocated space or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return from malloc, even if the amount of memory requested is small.

  可见,分配是在堆上(heap),而不是在栈上。

  但是,对于这段代码,有两个问题需要注意:

  1。当内存不再使用时,应使用free()函数将内存块释放。其实,free这个函数大多人都会调用,但是free了并不代表完事了,一定要把指向这个堆空间的指针清空,这个题目里应使用str=NULL。

  2。malloc只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。这道题目,打印出来是乱码。需要自动初始化,可以使用calloc函数。

【中兴笔试问题指针出错】相关文章:

中兴硬件笔试题08-29

中兴笔试面试经验08-23

中兴通讯笔试真题07-09

中兴笔试题目分享有答案12-07

中兴公司笔试真题(含答案)09-24

笔试经验-记中兴通讯测试岗两次笔试01-17

中兴面试笔试题目分享答案12-07

C++笔试题:关于链表和指针12-17

最新中兴Java语言笔试真题及答案09-24

2013中兴笔试题JSD130911-16