V675. Writing into read-only memory.
The analyzer has detected an attempt of writing into read-only memory.
Have a look at the following sample:
char *s = "A_string";
if (x)
s[0] = 'B';
The pointer 's' refers to a memory area which is read-only. Changing this area will cause undefined behavior of the program which will most probably take form of an access violation.
This is the fixed code:
char s[] = "A_string";
if (x)
s[0] = 'B';
The 's' array is created on the stack, and a string from read-only memory is copied into it. Now you can safely change the 's' string.
P.S.
If "A_string" is "const char *", why should this type be implicitly cast to "char *"?
This is done due to compatibility reasons. There exists a TOO large amount of legacy code in C where non-constant pointers are used, and C++ standard/compiler developers didn't dare to break the backward compatibility with that code.
This diagnostic is classified as:
|
You can look at examples of errors detected by the V675 diagnostic. |