gpt4 book ai didi

c - 中止数组连接函数中的陷阱 6

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:49 28 4
gpt4 key购买 nike

我正在尝试使用函数将数组连接在一起。它以某种方式工作但提示错误中止陷阱6。此外,它还说我无法释放分配的内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int *join_arrays(unsigned int arr1N, int arr1[], unsigned int arr2N, int arr2[], unsigned int arr3N, int arr3[]) {
int tableLen = arr1N + arr2N + arr3N;
printf("%d\n", tableLen);
int *table = malloc(tableLen * sizeof(int));
table = arr1;
printf("%d\n", table[arr1N - 1]);
for (int i = 0; i < arr2N; i++) {
table[i + arr1N] = arr2[i];
}
printf("%d\n", table[arr1N + arr2N - 1]);
for (int j = 0; j < arr3N; j++) {
table[j + arr1N + arr2N] = arr3[j];
}

return table;
}

int main(void)
{
int a1[] = { 89, 53, 98, 5, 5, 49, 95, 9, 54, 59, 59 };
int a2[] = { 44, 25, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 144, 0, 0, 0, 0};
int a3[] = { 20, 21, 22 };

int *joined = join_arrays(11, a1, 17, a2, 3, a3);

for (int i = 0; i < 11 + 17 + 3; i++) {
printf("%d ", joined[i]);
}
printf("\n");

free(joined);

return 0;
}

最佳答案

请注意,您需要复制所有 3 个表,而不仅仅是第二个和第三个。表的分配有效地丢弃了你的动态内存指针:

int *join_arrays(unsigned int arr1N, int arr1[], unsigned int arr2N, int arr2[], unsigned int arr3N, int arr3[]) {
int tableLen = arr1N + arr2N + arr3N;
printf("%d\n", tableLen);
int *table = malloc(tableLen * sizeof(int));
int tableOffset = 0;

for (int i = 0; i < arr1N; i++) {
table[tableOffset++] = arr1[i];
}

for (int i = 0; i < arr2N; i++) {
table[tableOffset++] = arr2[i];
}

for (int i = 0; i < arr3N; i++) {
table[tableOffset++] = arr3[i];
}

return table;
}

我还会考虑将其作为参数返回,以便也可以返回数组长度。为了获得更高的性能,使用 memcpy() 在某些系统上也可能有所帮助,尽管对于这样一个简单的示例,for 循环更容易理解。

关于c - 中止数组连接函数中的陷阱 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44936627/

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