Peter Olson <peabo@???> writes:
>> On October 14, 2015 at 3:20 PM Edward Bartolo <edbarx@???> wrote:
>>
>>
>> This is another part of the backend code where valgrind is saying:
>>
>> ==5501== 5 errors in context 1 of 3:
>> ==5501== Use of uninitialised value of size 8
>> ==5501== at 0x5172AFC: ____strtod_l_internal (strtod_l.c:889)
>> ==5501== by 0x403856: getRadiatingWifiList (automated_scanner.c:265)
>> ==5501== by 0x403BDC: autoWirelessScanPlus (automated_scanner.c:386)
>> ==5501== by 0x40400D: autoWirelessScanPlus_RN (automated_scanner.c:549)
>> ==5501== by 0x402E2C: main (backend.c:251)
>> ==5501== Uninitialised value was created by a stack allocation
>> ==5501== at 0x4034BB: getRadiatingWifiList (automated_scanner.c:155)
[...]
>> tmp_wifi_quality->quality = strtod(tmpstr, NULL);
>
> You should probably investigate the area around line 155.
The code shouldn't use tmpstr in this way at all because
The strtod(), strtof(), and strtold() functions convert the
initial portion of the string pointed to by nptr to double,
float, and long double representation, respectively.
[...]
If endptr is not NULL, a pointer to the character after the last
character used in the conversion is stored in the location
referenced by endptr.
[strtod(3)]
In other words, strtod is capable of finding the end of the number to be
converted on its own.
> =========================
>
> I have some other other comments.
>
>> tmp_wifi_quality = calloc(sizeof(wifi_quality),
>> 1);
>
> The canonical way to write this is
>
>> tmp_wifi_quality = calloc(1,
>> sizeof(wifi_quality));
>
> The calloc call is designed to return an array of N structures properly aligned
> for the requirements of the machine (for embedded pointers, as an
> example).
The malloc() and calloc() functions return a pointer to the
allocated memory that is suitably aligned for any kind of
variable.
[calloc(3)]
The pointer returned if the allocation succeeds is suitably
aligned so that it may be assigned to a pointer to any type of
object and then used to access such an object or an array of
such objects in the space allocated
[ISO/IEC 9899:1999 (E), 7.20.3|1]