我的源代码包含类似于以下内容的细分:
double ****A;
my_function(A);
会在my_function中抛出段错误。
然而,当我将其替换为:
double ***A;
my_function(&A);
然后my_function有效。我原以为my_function在两种情况下都会看到相同的参数。
答案 0 :(得分:2)
假设:
double ****A;
my_function(A);
并假设这些行显然在您的代码中,没有赋值给A
,我们可以确定您将未初始化的值(垃圾指针)传递给my_function
。这本身就有不明确的行为。它是否导致分段错误取决于my_function
对该值的影响。
此:
double ***A;
my_function(&A);
传递类型为double****
的有效值。该值是声明对象的地址。呼叫本身就完全有效。 (这可能会导致细分错误,具体取决于my_function
对它的作用,但您还没有向我们展示my_function
的作用,因此我不会进一步推测。)
答案 1 :(得分:2)
这:u = User.find_by(name: 'mateusz')
未设置为指向任何内容。它是一个没有已知值的悬空指针。
这个:double ****A;
这是你的函数调用所做的,将B指向A的存储,所以指针实际指向存在的东西。