填写作为指针传递的向量(C)

时间:2013-07-20 09:46:48

标签: c pointers memory

假设我有这个逻辑数组,我想分成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);

两个整数(lenlen2)已正确填充,但当我尝试查看cut_vecuncut_vec向量时,会发生段错误。

我有预感,我正在对内存做错了,因为我初始化了两个指针而没有实际指向任何东西..但是在函数中,使用实际的vecallocl,它们应该正确初始化。

当我从这个cut_and_uncut函数内部打印向量时,一切都有效..当在外面进行时(即在同一级别调用此函数),它不会。

怎么了?

1 个答案:

答案 0 :(得分:2)

试试这个:

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++;
}

并且不传递(仍然未分配的)指针,而是传递它们所在的地址:

long *cut_part;
long *uncut_part;

cut_and_uncut(... &cut_part, &uncut_part, ...)

这样,cut_and_uncut()返回后将保留修改。