

Yeah, but I kinda dont want to learn/use C++
She/her 🏳️⚧️
Professional cow, Linux Nerd, Hardcore Techno enthusiast. The Emporer protects us.
Yeah, but I kinda dont want to learn/use C++
I found the mistake. Since the country code char array only has a size of 2 it overwrites the \0 char causing the memory to leak.
Thanks, I did not knew this. I always appreciate constructive criticism. I am quite new to C so theres a shit ton of stuff I have never done or dont even know about.
This is the code I used:
#include <stdio.h>
#include <string.h>
#define MAX_ACCOUNTS 255
typedef struct
{
unsigned int id;
char account_creation_date [10];
char first_name [255];
char last_name [255];
char country_code [2];
unsigned int iban;
char password [255];
double balance;
} account;
account accounts_db[MAX_ACCOUNTS];
unsigned int accounts_created = 0;
account get_account_id (unsigned int id)
{
int i = 0;
while(i < MAX_ACCOUNTS)
{
if(accounts_db[i].id == id)
{
return accounts_db[i];
}
i++;
}
account account;
account.id = -1;
return account;
}
void create_account(char first_name [255], char last_name [255], char password [255], char country_code [2])
{
account new_account;
new_account.id = accounts_created;
strcpy(new_account.first_name, first_name);
strcpy(new_account.last_name, last_name);
strcpy(new_account.password, password);
strcpy(new_account.country_code, country_code);
strcpy(new_account.account_creation_date, "");
new_account.balance = 0.0;
new_account.iban = 0;
accounts_db[accounts_created] = new_account;
accounts_created++;
}
int main()
{
char first_name [255] = "Max";
char last_name [255] = "Mustermann";
char country_code [2] = "DE";
char password [255]= "password";
create_account(first_name, last_name, password,country_code);
account account = get_account_id(0);
printf("Name: %s %s \n", account.first_name, account.last_name);
printf("Account creation date: %s\n", account.account_creation_date);
printf("IBAN: %s %d", account.country_code, account.iban);
}```
When you run it you can see, that behind the country code of the IBAN you get the first two letters of the surename
The reason I got recommended to learn C first is so that you are getting used to handling memory by yourself. Then you switch to rust and since you are used to handling memory your rust code is usually better quality.
Another reason I want to learn C is because I regularly have to work with Arduinos.
No. I am just learning C and was curious how long it would take to get my first memory leak.
I want to learn rust and got the recommendation to learn C first.
That’s the funny thing. I had a (yet) very basic Programm and did not care at all about memory management. When I did some testing I realised, that for some reason when I printed string 1 I also got characters from string 2.
I also recently had to work with a data logger that was from the era of windows 95. Luckily the software attached to it also supported windows 7.
I did not knew this existed, so thanks for the tip.