I was looking at an example here: https://blog.parasoft.com/finding-memory-leaks-in-c
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *string, *string_so_far;
int i, length; length = 0;
for(i=0; i<argc; i++) {
length += strlen(argv[i])+1;
string = malloc(length+1);
/* * Copy the string built so far. */
if(string_so_far != (char *)0)
strcpy(string, string_so_far);
else *string = '\0';
strcat(string, argv[i]);
if(i < argc-1) strcat(string, " ");
string_so_far = string;
}
printf("You entered: %s\n", string_so_far);
return (0);
}
and read that when we execute the program with the following arguments:
hello this is a test
The variable string_so_far points to the string “hello” which was assigned as a result of the previous loop iteration. But I don't understand how? A step by step explanation would be really helpful.
Secondly, I came across this example in course material:
int countPrimes(int n)
{
PrimeSet *p = new PrimeSet(n);
return( p->countPrimeNumbers() );
}
It was stated that there's a memory leak here but I don"t really understand how, probably because I am not sure what exactly is happening here.