我試圖使用函數將數組連接在一起。它以某種方式工作,但會提示錯誤中止陷阱6.另外,它還說我無法釋放分配的內存。中止陷阱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;
}
'表= ARR1;'有效地使你的程序中前行就忘了全新的分配的內存位置... –
只是打敗了我 - 你需要將所有3個數組的值複製到'table'中。該分配不會執行表副本。 –
只是fyi,你可以得到你的數組中的元素數量,並用(例如)sizeof(a1)/ sizeof(a1 [0])替換幻數 – yano