How can you expand the dynamic character array (row) using realloc ()
?
Answer 1, Authority 100%
You can often see about this code:
char * string = malloc (...);
/ * ... * /
String = realloc (...);
This code contains a common error: if the realloc
execution failed, then String
will be recorded NULL
and we will lose access to the pointer, which It was originally received by calling Malloc
. Therefore, we will get a memory leakage.
The correct ideome solution will record the result of the execution of realloc
in a temporary variable, check the successfulness of the realloc
call, and only then (if the call was successful) overwrite the original variable:
char * string = malloc (...);
if (String == NULL) {
/ * ... * /
}
/ * ... * /
char * temp = realloc (string, ...);
If (Temp! = NULL) {
String = Temp;
}
It is important to note that with the successful execution of realloc
deallocies the old object, so immediately after the realloc
pointer String
in becomes unfuldeal and Cannot be used hereinafter.
Full example:
# include & lt; stdio.h & gt;
#Include & lt; stdlib.h & gt;
#Include & lt; String.h & gt;
INT MAIN (Void)
{
char * s = malloc (6);
if (s == null) {
FPRINTF (STDERR, "CAN NOT MALLOC (). \ n");
Return EXIT_FAILURE;
}
STRCPY (S, "Hello");
Puts (s);
char * temp = realloc (s, 14);
if (temp == null) {
FPRINTF (STDERR, "CAN NOT REALLOC (). \ n");
free (s);
Return EXIT_FAILURE;
}
s = temp;
STRCPY (S, "Hello, World!");
Puts (s);
free (s);
}