arrays - 为什么 ArrayPointer 给出分段默认值?
问题描述
在我的代码中,当我更改void myFunc(int arrayInput[3][2])
为时void myFunc(int **arrayInput)
,第 5 行出现分段错误,为什么?如何使用数组指针而不是具有固定维度的数组?谢谢!
#include <stdio.h>
const int myArray[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int main2() {
myFunc(myArray);
return 0;
}
void myFunc(int arrayInput[3][2]) {
printf("Line 1: %x\n",arrayInput);
printf("Line 2: %x\n",arrayInput + 1);
printf("Line 3: %x\n",*arrayInput);
printf("Line 4: %x\n",*(arrayInput+1));
printf("Line 5: %d\n",*(*(arrayInput + 1) + 0));
}
解决方案
双指针不代表二维数组。您可以尝试做的是像这样动态分配二维数组
#include <stdio.h>
#include <stdlib.h>
void myFunc(int** array);
int main() {
int** myarray = malloc(3*sizeof(int*));
for(int x = 0; x < 3;++x){
myarray[x] = malloc(2*sizeof(int));
}
for(int col = 0; col < 3; ++ col){
for(int row = 0; row < 2; ++row){
myarray[col][row] = col+row;
}
}
myFunc(myarray);
for(int x = 0; x < 3;++x){
free(myarray[x]);
}
free(myarray);
return 0;
}
void myFunc(int** arrayInput) {
printf("Line 1: %p\n",arrayInput);
printf("Line 2: %p\n",arrayInput + 1);
printf("Line 3: %p\n",*arrayInput);
printf("Line 4: %p\n",*(arrayInput+1));
printf("Line 5: %d\n",*(*(arrayInput + 1) + 0));
}
推荐阅读
- java - 排序 CommandLineRunner 执行
- c - 减去并获得秒作为 C 中的输入
- c# - 是否有必要释放从 C# 接收的 C++ 中字符串的内存?
- javascript - 谷歌表更改后重定向/打开我网站中另一个页面的选项卡
- reactjs - 在 Next.js 中删除 Cookie 并注销服务器端
- flutter - Flutter - 图标小部件
- ubuntu-20.04 - 未选择任何内容时,Nautilus 脚本未显示在右键菜单中
- reactjs - 获取和解码非 utf8 数据(reactjs)
- pandas - 是否有将数据框中的 datetime.date() 对象格式化为单引号字符串以匹配以下正则表达式的函数?
- r - 将多个答案重新编码到 R 中的同一个变量中