我有三个类型Vector**
阵列:vectors
,vectors_left
和vectors_right
。我正在尝试从vectors
中分配值,以便将其拆分为这两个数组。 Valgrind说无效写在memcpy()
线。
我尝试了不同的组合删除&
并将*
添加到sizeof()
参数中。
int count_left = count / 2;
int count_right = is_even(count) ? (count / 2) : (count / 2) + 1;
Vector** vectors_left = malloc(sizeof(Vector*) * count_left);
Vector** vectors_right = malloc(sizeof(Vector*) * count_right);
for (int u = 0; u < count; u++)
{
if (u < count_right - 1) {
memcpy(&vectors_left[u], &vectors[u], sizeof(Vector));
} else {
memcpy(&vectors_right[u - count_right + 1], &vectors[u], sizeof(Vector));
}
}
我的代码运行正常,但我遇到了这种泄漏。
您需要为要复制的向量分配内存。
你也不应该拿vectors_left[u]
的地址。 vectors_left
是一个指针数组,所以vectors_left[u]
是一个指针。
for (int u = 0; u < count; u++)
{
if (u < count_right - 1) {
vectors_left[u] = malloc(sizeof(Vector));
memcpy(vectors_left[u], &vectors[u], sizeof(Vector));
} else {
vectors_right[u - count_right + 1] = malloc(sizeof(Vector));
memcpy(vectors_right[u - count_right + 1], &vectors[u], sizeof(Vector));
}
}
没有看到vectors
的声明,我不知道&vectors[u]
是对还是错。
我也不会这样做作为带有if
语句的循环,我将它作为两个循环,因为两个案例之间没有重叠。
for (int u = 0; u < count_right - 1; u++) {
vectors_left[u] = malloc(sizeof(Vector));
memcpy(vectors_left[u], &vectors[u], sizeof(Vector));
}
for (int u = count_right - 1; u < count; u++) {
vectors_right[u - count_right + 1] = malloc(sizeof(Vector));
memcpy(vectors_right[u - count_right + 1], &vectors[u], sizeof(Vector));
}