Liste des Groupes | Revenir à l c |
On 2024-08-01, Bart <bc@freeuk.com> wrote:I don't spot the 'int main() {' part of your example; my version of it was meant to be static. (My A, B examples explicitly used 'static'.)On 01/08/2024 20:39, Kaz Kylheku wrote:The array which is initialized by the literal is what can beOn 2024-08-01, Mark Summerfield <mark@qtrac.eu> wrote:>This program segfaults at the commented line:>
>
#include <ctype.h>
#include <stdio.h>
>
void uppercase_ascii(char *s) {
while (*s) {
*s = toupper(*s); // SEGFAULT
s++;
}
}
>
int main() {
char* text = "this is a test";
The "this is a test" object is a literal. It is part of the program's image.
So is the text here:
>
char text[]="this is a test";
>
But this can be changed without making the program self-modifying.
changed.
In this situation, the literal is just initializer syntax,
not required to be an object with an address.
You must be talking about ARM then, with its limited address displacement (I think 12 bits or +/- 2KB).I guess it depends on what is classed as the program's 'image'.Programs can self-modify in ways designed into the run time.
>
I'd say the image in the state it is in just after loading or just
before execution starts (since certain fixups are needed). But some
sections will be writable during execution, some not.
The toaster has certain internal receptacles that can take
certain forks, according to some rules, which do not affect
the user operating the toaster according to the manual.
The dangers are small, but there must be reasons why a dedicationOne reason is that PC-relative addressing can be used by code to
section is normally used. gcc on Windows creates up to 19 sections, so
it would odd for literal strings to share with code.
find its literals. Since that usually has a limited range, it helps
to keep the literals with the code. Combining sections also reduces
size. The addressing is also relocatable, which is useful in shared
libs.
Les messages affichés proviennent d'usenet.