diff --git a/debugging/dividearrays.cpp b/debugging/dividearrays.cpp
index a674586d3cf8a98c873b49ccf52db3ba17429ed6..47fc1a61c3bd79f6a5f7bedd5cb6d4f253226fda 100755
--- a/debugging/dividearrays.cpp
+++ b/debugging/dividearrays.cpp
@@ -1,5 +1,5 @@
 #include <random>
-
+//using namespace std;
 int main(int argc, char **argv)
 {
   std::random_device generator;
@@ -8,7 +8,11 @@ int main(int argc, char **argv)
 
   for (int i=0; i<1024; i++) {
     int nom = intdist(generator);
-    int denom = intdist(generator);
+    int denom = intdist(generator);
+    while(denom == 0)
+    {
+        denom = intdist(generator);
+    }
     res[i] = nom / denom;
   }
   return 0;
diff --git a/debugging/dividearrays.exe b/debugging/dividearrays.exe
new file mode 100755
index 0000000000000000000000000000000000000000..d0cbf7a76abb968b6ac59024208c1543bde45a28
Binary files /dev/null and b/debugging/dividearrays.exe differ
diff --git a/debugging/fileutil.cpp b/debugging/fileutil.cpp
index f4dcc731bcc869e38495d5b36afd60b2aba20bb9..58147664ded49ab71958f704d51f0379e553e3e7 100755
--- a/debugging/fileutil.cpp
+++ b/debugging/fileutil.cpp
@@ -1,40 +1,38 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#define  BUFFSIZE  1024
+using namespace std;
+
+int main(int argc, char **argv)
+{
+	int ret = 0;
+	char *buff;
+	// Fix num lines, num columns, strdup-1
+	FILE *fin = fopen("bible.txt", "r");
+	FILE *fout = fopen("copy.txt", "w");
+
+	buff = (char*)malloc(BUFFSIZE);
+	if (NULL == buff)
+	{
+		fprintf(stderr, "molloc failed\n");
+	}
+
+
+	while (!feof(fin)) {
+		ret = fread(buff, 1, BUFFSIZE, fin);
+		if (ret != BUFFSIZE)
+		{
+			fwrite(buff, ret, 1, fout);
+		}
+		else
+		{
+			fwrite(buff, BUFFSIZE, 1, fout);
+		}
+	}
+	fclose(fin);
+	fclose(fout);
+	free(buff);
+	return 0;
+}
 
-namespace std {
-
-static void getline(char *line, FILE *fin)
-{
-  int c = '\0', cur = 0;
-  while (c != '\n' && (c = fgetc(fin)) != EOF) {
-    line[cur++] = c;
-  }
-  line[cur] = '\0';
-}
-
-}
-
-using namespace std;
-
-int main(int argc, char **argv)
-{
-  int cur = 0;
-  char *lines[16536];
-  char line[80];
-  // Fix num lines, num columns, strdup-1
-  FILE *fin = fopen("bible.txt", "r");
-  while (!feof(fin)) {
-    getline(line, fin);
-    lines[cur] = (char*) malloc(strlen(line));
-    strcpy(lines[cur], line);
-    cur++;
-  }
-  fclose(fin);
-  FILE *fout = fopen("copy.txt", "w");
-  for (int i=0; i<cur; i++) {
-    fputs(lines[i], fout);
-  }
-  fclose(fout);
-  return 0;
-}
diff --git a/debugging/fileutil.exe b/debugging/fileutil.exe
new file mode 100755
index 0000000000000000000000000000000000000000..2f52a5c65a0ac58f1570d789b3eff63b891511cb
Binary files /dev/null and b/debugging/fileutil.exe differ
diff --git a/debugging/fileutil.o b/debugging/fileutil.o
new file mode 100755
index 0000000000000000000000000000000000000000..2ba64852c59cd38982910c6a032e1e87c6894099
Binary files /dev/null and b/debugging/fileutil.o differ
diff --git a/debugging/gdb.txt b/debugging/gdb.txt
new file mode 100755
index 0000000000000000000000000000000000000000..56fad2c7509986e97b893b9e0bb5f100b746a8a6
--- /dev/null
+++ b/debugging/gdb.txt
@@ -0,0 +1,11 @@
+$2 = 0
+Starting program: C:\Users\54550\Desktop\Courses Resouces\Software design and constraction\Lab\Lab5\lab5-metaprogramming-and-debugging-lab-master\debugging\dividearrays.exe 
+[New Thread 9152.0x75d0]
+[New Thread 9152.0x7538]
+[New Thread 9152.0x8378]
+[New Thread 9152.0xbe8]
+
+Thread 1 received signal SIGFPE, Arithmetic exception.
+0x000000000040164b in main (argc=1, argv=0xe74510) at dividearrays.cpp:12
+12	    res[i] = nom / denom;
+$3 = 0
diff --git a/debugging/workitem.exe b/debugging/workitem.exe
new file mode 100755
index 0000000000000000000000000000000000000000..6a62a5c463c133dd37aad828a1cec7c4012f1572
Binary files /dev/null and b/debugging/workitem.exe differ
diff --git a/debugging/workitems.c b/debugging/workitems.c
index 0728aead0cd005a2e4cb6fe084d6e437a441fa79..83fdbbcca3fbf35f1c9a58ddb01448b7fa9ad090 100755
--- a/debugging/workitems.c
+++ b/debugging/workitems.c
@@ -3,7 +3,9 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
-
+
+ptread_mutex_t mut;
+int flag = 0;
 typedef struct workitem {
   void (*fn)(double *);
   int current;
@@ -14,6 +16,15 @@ typedef struct workitem {
 
 static void* launchThread(void *in)
 {
+  pthread_mutex_lock(&mut);
+  if(flag == 1){
+    pthread_mutex_unlock(&mut);
+    return NULL;
+  }
+  else{
+    flag = 1;
+  }
+  pthread_mutex_unlock(&mut);
   int n;
   workitem *data = (workitem*) in;
   volatile int started = 0;
diff --git a/debugging/workitems.o b/debugging/workitems.o
new file mode 100755
index 0000000000000000000000000000000000000000..0705d486b1b8b4911deb1da42fc93212f2ab959d
Binary files /dev/null and b/debugging/workitems.o differ