<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcel</title>
    <description>The latest articles on DEV Community by Marcel (@marceldev2009).</description>
    <link>https://dev.to/marceldev2009</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4118201%2F16de40ec-3001-4b7b-91b8-9e82231bae2b.png</url>
      <title>DEV Community: Marcel</title>
      <link>https://dev.to/marceldev2009</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marceldev2009"/>
    <language>en</language>
    <item>
      <title># Why I’m Embracing 21 Segfaults a Day at 17</title>
      <dc:creator>Marcel</dc:creator>
      <pubDate>Wed, 09 Sep 2026 21:46:14 +0000</pubDate>
      <link>https://dev.to/marceldev2009/-why-im-embracing-21-segfaults-a-day-at-17-eee</link>
      <guid>https://dev.to/marceldev2009/-why-im-embracing-21-segfaults-a-day-at-17-eee</guid>
      <description>&lt;p&gt;Today, I hit 21 segmentation faults in C. &lt;/p&gt;

&lt;p&gt;Good day guys, my name is Marcel and I’m 17, living in Nigeria, and getting ready to study Computer Engineering at FUTO. I already have some experience with JavaScript and building SaaS apps (I actually spent part of my afternoon fixing a caching layout for my web app), but I’ve spent the last month diving deep into C. &lt;/p&gt;

&lt;p&gt;And honestly? C is kicking my teeth in. But I love it.&lt;/p&gt;

&lt;p&gt;Coming from JavaScript, memory is an abstract concept. You create an object, and the engine manages the hardware for you. In C, you are the manager. I am building a simple contact book project to handle creating a contact, saving it on a dedicated .txt file which gets loaded when users want to view their contact list and it also handles functions such as searching and deleting a contact. Today I was working on the header file that adds a contact and was having trouble allocating memory to store the user names e.g, (like my legal name, Izuoba Somtochukwu Marcel). Managing &lt;code&gt;malloc&lt;/code&gt; and character buffers using raw loops felt like trying to defuse a bomb. One wrong index, and boom—&lt;code&gt;Segmentation Fault&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrestling with the Input Buffer
&lt;/h3&gt;

&lt;p&gt;Here is the exact single-user character loop I was battling today. I wanted to use &lt;code&gt;%c&lt;/code&gt; so it would capture full names with spaces instead of cutting off like &lt;code&gt;%s&lt;/code&gt; does, but I kept running into bugs where the loop would capture the leftover &lt;code&gt;Enter&lt;/code&gt; key (&lt;code&gt;\n&lt;/code&gt;) from previous inputs or loop infinitely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;addContact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;contact&lt;/span&gt; &lt;span class="n"&gt;add_psn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Clearing the invisible newline character stuck in the buffer&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;garbage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;garbage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter Name: "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

        &lt;span class="c1"&gt;// Break instantly when the user hits Enter so it doesn't hang!&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sc"&gt;'\n'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'\0'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Manually sealing the string&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;add_psn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Saved Name: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;add_psn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Shift From Code to Math
&lt;/h3&gt;

&lt;p&gt;Later in the day, while studying finite mathematical induction, something clicked. In math, you prove a base case $P(1)$, assume $P(k)$ is true, and prove $P(k+1)$. When you write a loop like the one above—moving character-by-character through an input buffer—your brain is executing that exact inductive logic in physical hardware memory lanes. &lt;/p&gt;

&lt;p&gt;Instead of waiting until I have physical ARM microcontrollers or hardware chips, I’m getting a head start entirely via software. I spent yesterday setting up PCB design simulation tools to practice building and routing boards right on my laptop. By writing my loops manually, handling the invisible newline characters trapped in the stream, and mastering pointers, I am learning exactly how software speaks to silicon before I ever print a physical board.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Big Goal
&lt;/h3&gt;

&lt;p&gt;People ask me why I’m bothering with raw C and low-level pointer arithmetic when I could just stick to high-level web frameworks. &lt;/p&gt;

&lt;p&gt;The answer is simple: I want to help build a world-class automotive future for Africa. I’m actually a huge fan of Mercedes-Benz and hope to work with their engineering teams one day. But to build the smart, electric, and autonomous vehicles of the future, Africa cannot just rely entirely on imported Western or Asian chips. We need to develop our own domestic silicon architectures leveraging ARM instruction sets and high-performance functional cores like those of AMD.&lt;/p&gt;

&lt;p&gt;To build a chip, you have to understand how code touches transistors. And to touch transistors, you have to survive the segmentation faults of C.&lt;/p&gt;

&lt;p&gt;21 crashes today means 21 lessons learned. Tomorrow, we go again.&lt;/p&gt;

&lt;h1&gt;
  
  
  c, #beginners, #programming, #hardware.
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>c</category>
      <category>learning</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
