这是naive的实现,假设disp函数的定义如下呢?

从编译结果来看,只是产生了warning,没有error,但是运行的时候出现段错误!这也从一方面验证了对于代码的warning也要保持足够警惕。

在Ubuntu下的提示如下:

究其原因是上述函数声明的是指向2个元素的一维数组,每个元素类型为指向int的指针类型。为什么会导致这样的理解?’[]’的优先级比’*‘高。修正如下:

此时声明了一个指针,指向具有2个元素的一维数组。2表示的是二维数组的列,这样就满足了expected int。

假设代码中取消注释行,重写函数func有:

^~~

很显然,从函数调用过程来说,当函数返回时,调用栈的空间全部释放。相比与原来的定义,是直接在传入的数组空间进行操作,所以直接返回即可。

解决的方法就比较清楚了,在局部函数内开辟在堆上的空间。

注意,在调用该函数后进行内存空间的释放。考虑到空间的开辟和释放不在同一个位置,很容易出现忘记释放内存的情况,因此另外一种情况是在main函数中开辟一个空间,将该空间作为函数参数传递到func中,赋值后返回,这种方式和原始定义类似。

总结:参数传递要指定列数,返回要手动开辟和释放内存空间。