在函数之间传递地址值时出现 C++ 段错误

标签 c++ pointers fault

我正在尝试编写一个简单的 C++ 算法来解决数独问题。我试图在不同函数之间传递地址值,但在运行时出现段错误。 (不用说,我不是很有经验:))

代码确实设法将 a[0] 的地址传递给 main 函数,我可以使用 main 中的指针读取值。当我尝试将地址传递给 solve 函数时,它给出了段错误。

(另外作为一个次要问题,我可以在 main 中正确读取值,使用 cout << *(a+5) 等正确(在 main 中注释掉),但是当我尝试打印使用 a 存储的所有 81 个值时for 循环,它会给出无意义的值(同样,在代码中注释掉)。该代码适用于 *(a+3) 或 a[3] 等文字,但当涉及 int 时则不会 for(int i, whatever) cout << *(a+i);)

#include <iostream>
using namespace std;

int * get_input();
void solve(int *);

int main()
{
    int * a;
    a = get_input();
    //cout << *a << " " << *(a+1) << " " << *(a+2) << " " << *(a+3) << " " << *(a+4);
    //for (int i = 0 ; i < 81 ; i++) {if (i%9 == 0) cout << "\n"; cout << a[i] << " ";}
    solve(a);
    return(0);
}

int * get_input ()
{
    int a[81];
    getinput:
    for (int i = 0 ; i < 81 ; i++)  {a[i] = 0;}
    for (int i = 0 ; i < 81 ; i++)  {cin >> a[i];}
    print:
    for (int i = 0 ; i < 81 ; i++)
    {
        if (i%27 == 0){cout << "\n";}
        if (i%9 == 0) {cout << "\n";}
        if (i%3 == 0) {cout << "  " << a[i];}
        if (i%3 != 0) {cout << a[i];}
    }
    cout << "\n\nCheck:\n1- Fix\n2- Reset\n3- Confirm\n\n";
    int check = 0;
    cin >> check;
    if (check == 1)
    {   
        int input[3] = {-1, -1, -1};
        while (true)
        {
            cin >> input[0] >> input[1] >> input [2];
            if (input[1] == 0) goto print;
            a[(input[2]-1)+((input[1]-1)*9)] = input[0];
        }
    }
    if (check == 2) goto getinput;
    if (check == 3) return a;
}

void solve(int * a)
{
    bool matrix[9][9][9];
    for (int i = 0 ; i < 81 ; i++) {for (int j = 0 ; j < 9 ; j++) {matrix[(i-i%9)/9][i%9][j] = true;}}
    for (int i = 0 ; i < 81 ; i++)
    {
        if (a[i] == 0) continue;
        else
        {
            for (int j = 0 ; j < 9 ; i++)
            {
                matrix[(i-i%9)/9][j][a[i]] = false;
                matrix[j][i%9][a[i]] = false;
                matrix[((i-i%9)/9)-((i-i%9)/9)%3+j%3][i%9-(i%9)%3+(j-j%3)/3][a[i]] = false;
            }
        }
    }
    for (int i = 0 ; i < 9 ; i++)
    {
        for (int j = 0 ; j < 9 ; j++)
        {
            cout << matrix[i][j][1] << " ";
        }
        cout << "\n";
    }
}

最佳答案

您在 getInput(数组 a)中返回一个局部变量的地址。我建议您将数组作为参数传递给此函数。另一种选择是动态分配数组,然后在程序终止之前注意释放它。

关于在函数之间传递地址值时出现 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937528/

相关文章:

c - 段错误,增加指针中的值

c++ - 在一个范围内生成不同的随机数

c++ - 可修改的左值?

c++ - 从不兼容类型 'int *'(又名 'value_type')分配给 'std::__1::vector<int, std::__1::allocator<int>>'

c++ - 程序崩溃,指针试图使 strcpy 类似

c++ - 使用 QObject 属性的指针

调用方法失败 : segmentation fault in c

c++ - 创建包含已分配数组的 unique_ptr 的正确方法

c++ - 为我的类(class)重载流运算符 << >> 的正确方法是什么?

c - 我不明白我是如何遇到段错误的