c - 填写作为指针传递的 vector (C)

标签 c pointers memory

假设我有这个逻辑数组,我想将其拆分为 1 部分和 0 部分,从而创建两个单独的 vector 。

于是我想出了以下方法:

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的输入 vector (好有想象力!)
  • cut_part 是索引为 1 的 vector ,长度为 cut_length
  • uncut_part 是索引为 0 的 vector ,长度为 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 vector ,发生段错误。

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

当我从这个 cut_and_uncut 函数内部打印 vector 时,一切正常.. 当在外面打印时(即在同一级别调用这个函数)它没有。

怎么了?

最佳答案

试试这个:

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() 返回后保留。

关于c - 填写作为指针传递的 vector (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17760888/

相关文章:

c - 简单链表构建代码说明

objective-c - 澄清 objective c 对象的一般自定义初始化方法/指针

c++ - *.cpp 文件中的 Typedef 模板类指针

c - 从 malloc() 中拾取垃圾数据的频率是多少

c++ - 如何报告自己的内存使用情况 C++

CLion 无法解析所有宏

c - 之前完美的C程序在Ubuntu上编译后无法运行

冒泡排序可以有多个程序吗?

c++ - 操作数的求值顺序

C++ map[]= 内存分支