#include <malloc.h>
לא משתמשים בקובץ הכותר הנ"ל יותר - תוסיף stdlib.h.
void main()
main אמורה להחזיר int בלבד.
char* Arr1[10];
אני מניח שהכוונה שלך היא char Arr1[10]; ולא כמו שכתבת (איך שאני רואה, אתה רוצה להכריז על מחרוזת ולא מערך של מחרוזות) כנ"ל לגבי ה-Arr2.
scanf("%s",Arr1);
לא קולטים מחרוזת בעזרת scanf. הדרך הבטוחה ביותר היא בעזרת fgets.
char* End[]={'E','X','I','T'};
שו? למה לעבוד קשה? ולמה שוב אתה מכריז זאת כמערך של מצביעים?
char *End= "EXIT"; יעשה את העבודה.
while (Arr1!=End)
מה הכוונה? לא משווים מחרוזות ככה, ואם הכוונה לא הייתה להשוות את המחרוזות, אז אני לא מבין מה ניסית לעשות. ע"מ להשוות מחרוזות תשתמש ב-strcmp לדוגמא.
Arr3=(char*)malloc(Size1*sizeof(char));
ע"פי התקן של שפת C, אין צורך להמיר את הערך המוחזר מ-malloc.
השתמשת ב-realloc, תמיד טוב לבדוק את הערך המוחזר של realloc.
בכל מקרה, הקוד מאוד מאוד מאוד מסורבל, מלא טעויות, חוסר הבנה מוחלט במחרוזות לצערי.
כדאי לך לחזור שוב על הפרק של מחרוזות/מערכים/מצביעים, ולהחליף ספר בהקדם האפשרי (אם אתה לומד מספר...)
תתקן את הקוד ע"פי ההערות שהבאתי למעלה, תדביק אותו שוב פה - יהיה יותר נוח לכולם לעזור לך.