conjunto
と呼ばれる大きな配列に、vetor1
,vetor2
、vetor3
という3つの配列を追加する必要がありますが、コードを実行するとセグメンテーションフォルトが発生します。セグメンテーションフォールトを続ける
私は50の位置の配列を作成し、この配列を0で埋めるために関数iniciaiza
を使用します。次に、関数read
で配列を読み込みます(ほとんどの場合、配列のサイズは3になります)。私はmalloc
を使用して作成したものに3つの配列をコピーする必要があります。最終的には、3つのアレイとその3つすべてのコピーを印刷する必要があります。あなたの関数で
#include <stdio.h>
#include <stdlib.h>
int *conjunto;
int *vetor1, *vetor2, *vetor3, n1, n2, n3;
int tam = 50;
void inicializa (int **tconj, int tam)
{
int i;
*tconj = (int *) malloc (tam * sizeof(int));
for (i = 0; i < tam; i++)
{
tconj[i] = 0;
}
}
void read (int **vec, int *n)
{
int i;
printf("size of array: ");
scanf ("%d", n);
printf("array: \n");
*vec = (int *) malloc (*n * sizeof(int));
for (i = 0; i < *n; i++)
{
scanf ("%d", &(*vec)[i]);
}
}
void add (int *conjunto, int *vetor1, int *vetor2, int *vetor3, int n1, int n2, int n3)
{
int i, j, k, w;
int fim1 = (n1 + n2);
int fim2 = (n1 + n2 + n3);
for (i = 0; i < n1; i++)
{
conjunto[i] = vetor1[i];
}
for (j = n1; j < fim1; j++)
{
conjunto[j] = vetor2[j];
}
for (k = fim1; k < fim2; k++)
{
conjunto[k] = vetor3[k];
}
}
void print_array (int *vec, int n)
{
int i;
printf("array: ");
for (i = 0; i < n; i++)
{
printf("%d ", vec[i]);
}
printf("\n");
}
int main()
{
inicializa (&conjunto, tam);
read (&vetor1, &n1);
read (&vetor2, &n2);
read (&vetor3, &n3);
print_array (vetor1, n1);
print_array (vetor2, n2);
print_array (vetor3, n3);
add (conjunto, vetor1, vetor2, vetor3, n1, n2, n3);
print_array (conjunto, tam);
return 0;
}
だから**正確に**セグメンテーションは起こりますか? –
'未使用変数 'w' [-Werror = unused-variable]' – jdarthenay
プログラムを実行すると、3つの配列をすべて読み取って印刷できますが、コードはコピーを作成していません。私はwを消すのを忘れた。 – fmbra