好吧,大概是这样的。concocted本身是个指针,且是指向5*5大小的空间的指针,但是它不是指针的指针,但是函数需要的是指针的指针。你在对concocted进行强制转换时丢失了concocted是指向5*5大小空间的指针信息(其实就是一维指针,但是多了些描述。传concocted和concocted[][5]到函数编译器的处理方式是不一样的),转而把其变为一个指针的指针,问题就明显了,在你的disp函数调用时就是简单的**s也会报错,因为s是从一维指针强制转换而来的,所以**s多半会指向未知的地址(从程序来看这里应该是对0地址进行了读操作),如果程序在这里当掉,应该高兴。
解决方法,1.传这个数组过去,并当做数组指针来使用。
2.重新申请个指向指针的指针数组,然后再把concocted数组的相应地址赋值给这个数组。
总结:这其实就是数组与指针的区别了,大多数情况下数组和指针是等价的,但是并不是说任何时候都是等价的。有个印象使用的时候注意下就可以了。
你动态分配的是数组指针不是int数组
你传个int数组用二级指针干吗?
二级指针取两次都取到你数组的值的地址里面的内容去了,当然错误了
数组本来就 是相当于指针的
指针取两次就取到你数组里的值当地址了
呵呵,哥们,实际上一点都不诡异,
你的disp函数与connect不在一个作用域上面;
主要注意栈空间的作用域就行了
main函数在调用disp函数时候,
由于你定义的concocted为系统 栈 空间上面的局部变量,
此时调用concocted已经被系统回收释放,
disp中s确实得到了concocted的地址,
但是由于此时concocted已经被系统释放,
地址里面内同为空,
所以s虽然得到了地址,、
但是指向的内容实际是 未知 的系统栈空间
所以在打印的时候就会出现问题.....
由于realGrid是在对上面分配的空间,所以就不存在这个问题,而且记的堆在使用以后,一定要记得释放空间,养成良好的编程习惯
还有什么问题,可以一起探讨一下,ucliff@163.com!