Sujet : Re: "undefined behavior"?
De : janis_papanagnou+ng (at) *nospam* hotmail.com (Janis Papanagnou)
Groupes : comp.lang.cDate : 12. Jun 2024, 22:38:55
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v4d4hm$1rjc5$1@dont-email.me>
References : 1
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0
On 12.06.2024 22:47, DFS wrote:
Wrote a C program to mimic the stats shown on:
https://www.calculatorsoup.com/calculators/statistics/descriptivestatistics.php
My code compiles and works fine - every stat matches - except for one
anomaly: when using a dataset of consecutive numbers 1 to N, all values
40 are flagged as outliers. Up to 40, no problem. Random numbers
dataset of any size: no problem.
And values 41+ definitely don't meet the conditions for outliers (using
the IQR * 1.5 rule).
Very strange.
Edit: I just noticed I didn't initialize a char:
before: char outliers[100];
after : char outliers[100] = "";
And the problem went away. Reset it to before and problem came back.
Makes no sense. What could cause the program to go FUBAR at data point
41+ only when the dataset is consecutive numbers?
Also, why doesn't gcc just do you a solid and initialize to "" for you?
Yeah, I had a similar problem like you; I had a declaration
char answer[100];
and was surprised that it wasn't initialized with "42".
Seriously; why do you expect [in C] a declaration to initialize that
stack object? (There are other languages that do initializations as
the language defines it, but C doesn't; it may help to learn before
programming in any language?) And why do you think that "" would be
an appropriate initialization (i.e. a single '\0' character) and not
all 100 elements set to '\0'? (Someone else might want to access the
element 'answer[99]'.) And should we pay for initializing 1000000000
characters in case one declares an appropriate huge array?
Janis