2 개의 별도 벡터를 만드는이 논리적 배열을 1 부분과 0 부분으로 나누고 싶다고 가정 해 보겠습니다.포인터로 전달 된 벡터 채우기
그래서 나는 다음과 같은 방법을 함께했다 (! 그래서 상상력)
void cut_and_uncut(long* input, int length, long* cut_part, int* cut_length, long* uncut_part, int* uncut_length){
int i;
int n_cut=0;
for(i=0;i<length;i++) n_cut+=input[i];
cut_part = vecallocl(n_cut);
uncut_part = vecallocl(length-n_cut);
*cut_length = n_cut;
*uncut_length = length-n_cut;
int index_cut = 0;
int index_uncut = 0;
for(i=0;i<length;i++){
if(input[i]==1){
cut_part[index_cut] = i;
index_cut++;
} else {
uncut_part[index_uncut] = i;
index_uncut++;
}
}
}
input
길이length
의 입력 벡터이다cut_part
가 1의 인덱스의와 벡터이다 길이cut_length
uncut_part
은 0의 인덱스, 길이uncut_length
인 벡터입니다. 0
: 나는
int len,len2;
long* cut_vec;
long* uncut_vec;
cut_and_uncut(split,matrix.m+matrix.n,cut_vec,&len,uncut_vec,&len2);
두의 int (len
및 len2
) 제대로 가득이 함수를 호출
(주 vecallocl(k)
는 malloc(k*sizeof(long))
단지 바로 가기입니다)하지만 난 볼 때 cut_vec
및 uncut_vec
벡터에 segfault가 발생합니다.
나는 실제로 뭔가를 가리키지 않고 두 포인터를 초기화하기 때문에 내가 메모리에 뭔가 잘못하고 있다는 생각이 들지만 실제 vecallocl 함수를 사용하면 올바르게 초기화해야합니다.
이 cut_and_uncut
함수 내부에서 벡터를 인쇄하면 모든 것이 작동합니다. 외부 (즉,이 함수가 호출되는 동일한 레벨에서) 일 때 모든 것이 작동합니다.
무엇이 잘못 되었나요?
void cut_and_uncut(long* input, int length, long** cut_part,
int* cut_length, long** uncut_part, int* uncut_length)
....
// inside the function you now use `*cut_part` instead of `cut_part`, etc.
if(input[i]==1){
*cut_part[index_cut] = i;
index_cut++;
} else {
*uncut_part[index_uncut] = i;
index_uncut++;
}
을하며이있는 (아직 할당되지 않은) 포인터하지만 주소가 아닌 통과 :
"이 cut_and_uncut 함수 내부에서 벡터를 인쇄하면 모든 것이 작동합니다. 외부 (즉,이 함수가 호출되는 동일한 레벨에서) 작업을 수행하면 벡터가 작동하지 않습니다." 밖에서 무슨 heppens? – lulyon
예를 들어 cut_vec [0]을 호출 할 때마다 분할 오류가 발생합니다. – Helios