初学者c ++程序员,编写代码解决数独难题。我会保留背景信息以避免混淆。
我有一个指针数组int *P[9]
,我为每个条目分配了一个特定的地址。我想将这些地址分配给另一个指针数组int *B[81]
。
P[0]
应与B[0]
,P[1]
到B[8]
对应,依此类推。
当我将这些传递给函数时:
void (int B[ ], int P[ ] ) {...}
似乎函数正在将地址P[ ]
转换为整数值。在调用函数之前P[0]
指向地址0x7fff978d46b0
,如果我在函数内检查P[0]
的值,它就像`48782346。
#include<iostream>
using namespace std;
void assign_box(int matrix[], int P[])
{
cout << "P[0] in function: " << P[0] << "\n";
matrix[0]=P[0];
}
int main()
{
int table[9][9];
//Initialise table entries to 0
for(int i=0; i<9; i++)
{
for(int j=0; j<9; j++)
{
table[i][j]=0;
}
}
//Assign addresses to vector P, for brevity P is of length one
int *P[1];
P[0]=&table[0][0];
cout<< "P[0] before function: " << P[0] << "\n";
int*B[81];
assign_box(B[81], P[9]);
}
如果它这样做并且工作我不在乎,但不幸的是,当我分配B[0] = P[0]
时,它会用Segmentation fault (core dumped)
命中我,这让我想知道是函数试图分配指针{ {1}}到地址48782346.
函数是否可以将地址转换为整数值?
道歉,如果我的问题不清楚或冗长,第一次提问者。谢谢你的编辑。
答案 0 :(得分:2)
如果您取消引用int**
(或int*
),则会获得int*
。如果您取消引用int
,则会获得int
。这正是您正在做的事情,以及为什么最终会以//main
int *P[1]; //Array of pointers to int
int *B[81]; //Array of pointer to int
assign_box(B[81], P[9]); //Pass in two pointers to int
//assign_box
matrix[0]=P[0]; //assign int to int
结束。
assign_box
您可能打算将assign_box(B, P)
称为void assign_box(int *B[], int *P[]);
,并将签名设为type identifier[size];
。这将允许您将数组内的一个指针分配给数组中的另一个指针。
有很多事情可能导致分段错误,但它们都源于无效的数组索引。如果数组声明为0
,则它具有从size - 1
到int *B[81];
的有效索引。因此,B[81]
表示angular.module('app').directive("passwordConfirm", function() {
"use strict";
return {
require : "ngModel",
restrict : "A",
scope : {
//We will be checking that our input is equals to this expression
passwordConfirm : '&'
},
link : function(scope, element, attrs, ctrl) {
//The actual validation
function passwordConfirmValidator(modelValue, viewValue) {
return modelValue == scope.passwordConfirm();
}
//Register the validaton when this input changes
ctrl.$validators.passwordConfirm = passwordConfirmValidator;
//Also validate when the expression changes
scope.$watch(scope.passwordConfirm, ctrl.$validate);
}
};
});
无效。
答案 1 :(得分:0)
你传递了错误的参数。你试图传入一个不存在的数组对象B [81]。你只有B [0] - B [80]。另外,B [80]不是int指针。它是int数组中的int。 P [9]是指向整数数组的指针。所以,你试图将一个不存在的数组槽中的整数传递给一个不带整数的参数 - 它需要整数数组。
#include<iostream>
using namespace std;
void assign_box(int matrix[], int P[])
{
cout << "P[0] in function: " << P[0] << "\n";
matrix[0]=P[0];
}
int main()
{
int table[9][9];
//Initialise table entries to 0
for(int i=0; i<9; i++)
{
for(int j=0; j<9; j++)
{
table[i][j]=0;
}
}
//Assign addresses to vector P, for brevity P is of length one
int *P[1];
P[0]=&table[0][0];
cout<< "P[0] before function: " << P[0] << "\n";
int*B[81];
assign_box(B[81], P[9]); // WRONG
}