假设我有这个逻辑数组,我想将它分成 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
(注:vecallocl(k)
只是 的快捷方式malloc(k*sizeof(long))
)
我用这个函数调用
int len,len2;
long* cut_vec;
long* uncut_vec;
cut_and_uncut(split,matrix.m+matrix.n,cut_vec,&len,uncut_vec,&len2);
两个整数(len
和len2
)已正确填充,但是当我尝试查看cut_vec
和uncut_vec
向量时,会发生段错误。
我有预感,我对内存做错了,因为我初始化了两个指针,而它们实际上没有指向任何东西..但是在函数中,使用实际的 vecallocl,它们应该被正确初始化。
当我从这个函数内部打印向量cut_and_uncut
时,一切正常......当在外面做它时(即在同一级别调用这个函数)它没有。
怎么了?