【发布时间】:2018-05-30 11:37:00
【问题描述】:
我正在努力使用函数 int** Solve()。我在任何地方都没有找到解决方案,或者我无法准确地表达我的问题。我无法返回正确的值,我总是得到编译器错误或分段错误。如何初始化我想从函数返回的int ptr**?请注意,函数类型 (int**) 已给出,我无法更改它。我尝试使用 calloc,因为如果我想返回一些 line int ptr[4][4],它说我正在返回局部变量。我不知道该怎么做,而且 ptr 不一定是 int** 也许。我只想返回正确的元素并使用返回 ptr。我的代码:
int** Solve(){
int array[6][6];
//some determining of array's elements...
int **ptr=calloc(4,sizeof(int*));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
ptr[i][j]=array[i+1][j+1];
}
}
return ptr;
}
【问题讨论】:
-
int**将是交错数组而不是多维数组。您的calloc调用分配了一个指针数组,但您没有分配这些子数组。请注意,C 中的交错数组是一个坏主意,除非您真的需要一个“非矩形大小”的缓冲区,因为内存碎片风险增加并且需要free所有子数组。单独返回int**而不指明缓冲区的长度意味着消费者将无法正确地free。 -
自从我完成 som C 以来已经有一段时间了,但是,我觉得你搞砸了你的 **ptr,你允许他在 int
int*上有 4 个指针,但那些没有分配要接收整数,您还需要为这些指针中所需的整数分配空间。 -
@AugustKarlstrom 如果我只是通过初始化创建二维数组,我不能返回它,因为它被认为是局部变量。而且,int **solve() 给了我,我不能改变它。如果您的意思有所不同,请尝试分享示例代码以让我更好地理解。谢谢你:)
-
@victory 没关系,我错了。在 C 中,您不能定义一个函数,该函数采用任意大小(二维)的二维数组。