gpt4 book ai didi

c - 为什么我使用 memcpy() 时会出现无效写入 (Valgrind)?

转载 作者:行者123 更新时间:2023-11-30 16:18:41 25 4
gpt4 key购买 nike

我有三个 Vector** 类型的数组:vectorsvectors_leftvectors_right。我正在尝试从 vector 中分配值,以便将其拆分为这两个数组。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));
}
}

我的代码工作正常,但我遇到了这种泄漏。

最佳答案

您需要为要复制到的 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));
}

关于c - 为什么我使用 memcpy() 时会出现无效写入 (Valgrind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com