my関数は2つの存在する配列(+サイズ)と、関数内で新しい配列を構築し、最後にサイズを再割り当てするポインタを取得します。 最後に関数は新しいサイズを返しますが、新しい配列のprintfはクラッシュします。 新しいサイズが本当に真実であるアルゴリズムがうまく動作します。reallocと配列に関する問題
int UniteArray(int *a,int sizeA,int *b,int sizeB,int *tempArray)
{
int i=0,j=0,counter=0;
tempArray=(int*)malloc(sizeA*sizeof(int));
while (i<sizeA)
{
if (a[i]==b[j])
{
tempArray[counter++]=a[i];
i++;j++;
}
else if (a[i]<b[j])
i++;
else if (b[j]<a[i])
j++;
}
tempArray=(int*)realloc(tempArray,counter);
return counter;
}
ここでは関数呼び出しを示します。
void Ex3()
{
int *a,*b,*unite;
int sizeA,sizeB,newSize,counter,i;
a=BuildArray(&sizeA);//Build the A array.
b=BuildArray(&sizeB); //Build the B array.
merge_sort(a,0,sizeA-1);//merge the A array.
merge_sort(b,0,sizeB-1); //merge the B array.
counter=UniteArray(a,sizeA,b,sizeB,&unite); //<<<<<<< HERE
printf ("The new Length: %d.\n",counter);
for (i=0;i<counter;i++)
printf ("%d ",unite[i]);
コンパイラの警告を無視する(または古代のコンパイラを使用する)が、なぜコードが機能しないのかを知ることができます。次回はすべての推奨される警告を有効にし、警告メッセージなしでコードをコンパイルし、デバッガを使用してください。そして、ローカル変数が何であるかを学びます。それはあなたのCの本やレッスンのなかで最初のはずです。後者の場合:ローカル変数と値渡しについて明確にするよう先生に教えてください。 – Olaf
* Ahem *もう少し触ってみると...あなたの質問には、エラーの全文を含める必要があります。私たちは本当に "それが墜落"したり、 "エラーがありました"とあなたを助けることができません。それが「セグメンテーション・フォールト」の場合は、理由を見つけるために別のツールを使用する必要があります。 segfaultsの詳細については、[この質問と回答](http://stackoverflow.com/q/33047452/472647)を参照してください。 – CodeMouse92