我正在尝试创建一个将两个向量附加在一起的函数,但是当我尝试将更多内存重新分配给第一个向量时,我最终得到了一个段错误,因此第二个向量适合.这是代码
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) 我的任务是创建一个包含节点和边缘的简单图形.在我给出的头文件中,我无法修改
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)
我在这里有点困惑,我出错了什么,我该如何解决?该程序几乎正在工作,我得到一个奇怪的错误,我认为可能是因为这个.