Edward Bartolo <edb...@gmail.com> writes: > Since yesterday I have been trying to understand why "char** > essid_list" is working inside getInstalledEssidList(&count, > essid_list) but failing as soon as I try to access essid_list[0] > outside the function. > > Both the source and the gdb text output are attached. > > Any helpful pointers are appreciated.
The prototype of getInstalledEssidList is int getInstalledEssidList(int* count, char** essid_list) and you call that as char** essid_list; [...] getInstalledEssidList(&count, essid_list); C passes everything by value, hence, getInstalledEssidList gets called with a copy of the value of the essid_list of the caller (an uninitialized pointer) and then goes on to modify this copy, ie, changes don't affect anything outside of the function. In theory, you could pass a *** and then modify the original pointer but it's a good idea to avoid avoidable levels of indirection. The easiest way to do something like this is to return the char ** from the function, returning NULL to signal failure/ "didn't find anyhting". NB: getRadiatingWifiList obviously suffers from the same problem and will need to be modified in the same way. -------------- --- automated_scanner.c 2015-09-11 14:42:34.319852358 +0100 +++ a.c 2015-09-11 14:50:28.937357676 +0100 @@ -41,11 +41,14 @@ } wifi_quality; -int getInstalledEssidList(int* count, char** essid_list) +char **getInstalledEssidList(int* count) { + char **essid_list; DIR * dir; struct dirent * ent; int el_size = 0; // stands for essid_list size + + essid_list = NULL; // First get a list of installed wireless "interfaces" files if ((dir = opendir(IFACES_PATH)) != 0) { @@ -81,10 +84,10 @@ IFACES_PATH, strerror(errno) ); - return old_errno; + return NULL; } - return 0; + return essid_list; } int getRadiatingWifiList(int* active_wifis, void** active_wifi_list) @@ -199,7 +202,7 @@ char* scan_buffer; // get a list of currently installed wifi essids - getInstalledEssidList(&count, essid_list); + essid_list = getInstalledEssidList(&count); //fprintf(stdout, essid_list[0], "\n"); // get a list of irradiating wifis ----------------- _______________________________________________ Dng mailing list Dng@lists.dyne.org https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng