小编Odi*_*god的帖子

在C中重新分配数组

我正在尝试创建一个将两个向量附加在一起的函数,但是当我尝试将更多内存重新分配给第一个向量时,我最终得到了一个段错误,因此第二个向量适合.这是代码

void vectorAppend(double** v1, size_t* s1, double const* v2, size_t s2){
  assert(v1 && v2 && *s1 > 0 && s2 > 0);
  (*v1) = realloc((*v1), (*s1 + s2)*sizeof(double));
  for (size_t i = 0; i < s2; i++){
    *v1[*s1+i]=v2[i];
  }
  *s1+=s2;
}
Run Code Online (Sandbox Code Playgroud)

这就是我从main中调用它的方式

double *v1 = vectorConstruct(3, 2);
double *v2 = vectorConstruct(3, 0);
unsigned int s = 3;
vectorAppend(&v1, &s, v2, 3);
Run Code Online (Sandbox Code Playgroud)

vectorConstruct返回一个指向初始化为第二个参数的向量的指针.

double* vectorConstruct(size_t s, double val){
  assert(s>0);
  double *ret = malloc(s*sizeof(double));
  for(size_t i = 0; i < s;i++){
    ret[i]=val; …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers realloc

2
推荐指数
1
解决办法
152
查看次数

C:结构中的结构

我的任务是创建一个包含节点和边缘的简单图形.在我给出的头文件中,我无法修改

typedef struct Edge_s* Edge;
typedef struct Node_s* Node;
typedef struct Graph_s* Graph;
Run Code Online (Sandbox Code Playgroud)

在我的图表中

typedef struct{
  size_t w;
  struct Node_s* target;
}*Edge;

typedef struct{
  size_t value;
  Edge* edges;
  size_t s;
}*Node;

typedef struct{
  Node* nodes;
  size_t n;
  Edge* edges;
  size_t e;
}*Graph;

Edge create_edge(Node t, size_t w){
  Edge ret = malloc(sizeof(*ret));
  ret->target = t;
  ret->w = w;
  return ret;
}
Run Code Online (Sandbox Code Playgroud)

这会在编译时发出警告

warning: assignment from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)

我在这里有点困惑,我出错了什么,我该如何解决?该程序几乎正在工作,我得到一个奇怪的错误,我认为可能是因为这个.

c struct pointers

2
推荐指数
1
解决办法
156
查看次数

标签 统计

c ×2

pointers ×2

arrays ×1

realloc ×1

struct ×1