Duda con liberar memoria utilizando for anidado

¡Hola! tengo una duda con lo siguiente:

Tengo un árbol binario donde tengo diferentes tipos de datos que corresponden a diferentes estructuras enlazadas entre ellas. Bueno, la cuestión es que necesito implementar una función que se llame copiar. Esta libera memoria de los datos del Alumno 1 para introducirle los datos del alumno 2.

El código que uso es el siguiente.

void copiar(void *datos1, void *datos2) {      Alumnos *A1 = (Alumnos*)datos1;     Alumnos *A2 = (Alumnos*)datos2;      int i, j;      //Lo primero que hacemos es liberar      for (i = 0; i < A1->numAsig; i++) {         for (j = 0; j < A1->asignaturas[i].numParciales; j++) {             free(A1->asignaturas[i].parciales);         }         free(A1->asignaturas);     }      //creamos memoria       A1->asignaturas = (Alumnos*)malloc(A2->numAsig * sizeof(Alumnos));  //memoria para el array de asignaturas     for (i = 0; i < A2->numAsig; i++) {         for (j = 0; j < A2->asignaturas[i].numParciales; j++) {              A1->asignaturas[i].parciales = (Parcial*)malloc(A2->asignaturas[i].numParciales * sizeof(Parcial)); //memoria para el array de parciales         }     }      //Datos estáticos:      A1->numAsig = A2->numAsig;     strcpy(A1->nombre, A2->nombre);     strcpy(A1->expediente, A2->expediente);     /////      /*Copiamos datos*/       for (i = 0; i < A2->numAsig; i++) {         A1->asignaturas[i].codAsignatura = A2->asignaturas[i].codAsignatura;         A1->asignaturas[i].notaAsignatura = A2->asignaturas[i].notaAsignatura;         strcpy(A1->asignaturas[i].numParciales, A2->asignaturas[i].numParciales);         strcpy(A1->asignaturas[i].nomAsignatura, A2->asignaturas[i].nomAsignatura);         for (j = 0; j < A2->asignaturas[i].numParciales;j++) {              A1->asignaturas[i].parciales[j].notaParcial = A2->asignaturas[i].parciales[j].notaParcial;             strcpy(A1->asignaturas[i].parciales[j].fecha, A2->asignaturas[i].parciales[j].fecha);          }     }   } 

Mi duda es con la parte del código que libera memoria del alumno 1, tanto del array asignatura como de parciales.

for (i = 0; i < A1->numAsig; i++) {         for (j = 0; j < A1->asignaturas[i].numParciales; j++) {             free(A1->asignaturas[i].parciales);         }         free(A1->asignaturas);     } 

¿Es correcto este código para liberar memoria? mi duda viene porque me dice un compañero de clase que este bucle no sirve ya que libera asignaturas más de una vez lo que llevaría a un error.

Muchas gracias por las respuestas que me puedan brindar.

Duda Java + MySQL

Buenas tengo una duda con un multi update en java: quiero lanzar varias sentencias update concatenadas en un stringBuilder. El formato del stringBuilder es el siguiente: UPDATE morosos SET importe = importe + 80 WHERE dni = ‘33333333C’;UPDATE morosos SET importe = importe + 100 WHERE dni = ‘44444444D’; etc, etc…

Mi intención es ejecutar todas esas sentencias con un executeUpdate, pero me lanza el siguiente error ‘com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;’

public void actualizarMorosos(String path, ConexionRecuperacion con) {         try {             BufferedReader br = new BufferedReader(new FileReader(file));             String line;              ArrayList<String> dniMorosos = new ArrayList<>();             ResultSet rs = con.rs("SELECT * FROM morosos");             while (rs.next()) {                 dniMorosos.add(rs.getString("dni"));             }              update = new StringBuilder();              while ((line = br.readLine()) != null) {                 /* separacion de las lineas */                 String[] split = line.split("#");                 /* quitamos la primera linea */                 if (!line.contains("RECIBO") || !line.contains("PISO") || !line.contains("IMPORTE")) {                     if (dniMorosos.contains(split[2])) {                         update.append("UPDATE morosos SET ");                         update.append("importe = importe + " + split[5]);                         update.append(" WHERE dni = '" + split[2] + "';");                     }                 }             }              /* imprimir query */             System.out.println(update.toString());             /* lanzar query */             con.update(update.toString());         } catch (Exception e) {             e.printStackTrace();         }     } 

Duda sobre el patron MVC en Android

quería preguntar sobre si es una buena practica usar la clase de la actividad como controlador de la vista.

Estoy haciendo una app implementando el patrón mvc, pero nose si conviene seguirla así, o crear un controlador por aparte? en una clase diferente y desde allí crear algunos métodos para gestionas las acciones de la vista.

Muchos dicen que la activity es la propia vista, así que me ha surgido esa duda.

saludos.

duda con funcion isset() laravel 5.5

Tengo una inquietud con respecto a la funcion isset, tengo las siguiente lineas.

 $  usuarios=usuarios::where("usuario_ad", 'danielad')->get();             $  prueba=isset($  usuarios);             dd($  usuarios); 

Con esto, la consulta me arroja registros siempre y cuando ese usuario exista, si no existe pues obviamente mente no arroja nada, la duda mia, es que isset en cualquiera de los dos casos me arroja false, y nunca un true… como puedo lograr que esto funcione asi?

Duda con BeautifulSoap al leer páginas web

Estuve tratando de leer el contenido de una página con bs4 mediante el siguiente código:

url=BeautifulSoup(requests.get(‘http://www.bloomberg.com/markets/currencies’).content) print(url.text)

Sin embargo, pareciera que la página bloquea el acceso a el script:

Bloomberg – Are you a robot?

    html, body, div, span, applet, object, iframe,     h1, h2, h3, h4, h5, h6, p, blockquote, pre,     a, abbr, acronym, address, big, cite, code,     del, dfn, em, img, ins, kbd, q, s, samp,     small, strike, strong, sub, sup, tt, var,     b, u, i, center,     dl, dt, dd, ol, ul, li,     fieldset, form, label, legend,     table, caption, tbody, tfoot, thead, tr, th, td,     article, aside, canvas, details, embed,     figure, figcaption, footer, header, hgroup,     menu, nav, output, ruby, section, summary,     time, mark, audio, video {         margin: 0;         padding: 0;         border: 0;         font-size: 100%;         font: inherit;         vertical-align: baseline;     }     /* HTML5 display-role reset for older browsers */     article, aside, details, figcaption, figure,     footer, header, hgroup, menu, nav, section {         display: block;     }     body {         line-height: 1;     }     ol, ul {         list-style: none;     }     blockquote, q {         quotes: none;     }     blockquote:before, blockquote:after,     q:before, q:after {         content: '';         content: none;     }     table {         border-collapse: collapse;         border-spacing: 0;     }      * {         box-sizing: border-box;     }      body {         background-color: #f2f2f2;         font-family: "BWHaasGrotesk-55Roman-Web";         line-height: 1.2;     }      .header {         margin: 0;         height: 60px;         width: 100%;         background-color: black;         color: white;         overflow-x: hidden;     }      .logo {         float: left;         margin: 0 20px;         height: 60px;         width: 140px;         background-image: url('data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTcuNzUgNDcuNjMiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojZmZmO308L3N0eWxlPjwvZGVmcz48dGl0bGU+Qmxvb21iZXJnX05IR193aHQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTgxLjczLDExMzhIMTAwLjZjMy41NywwLDYuMzIuODcsOC4yNiwyLjQ1YTkuNDUsOS40NSwwLDAsMSwzLjM3LDcuNmMwLDMuNjctMS40OCw2LTQuNTQsNy4zOXYwLjE1YzQsMS4zMyw2LjI3LDQuOSw2LjI3LDkuMjMsMCw0LjEzLTEuNTgsNy4zNC00LjE4LDkuMjgtMi4xOSwxLjU4LTUsMi4zNS04LjgyLDIuMzVIODEuNzNWMTEzOFptMTcsMTVjMiwwLDMuNTItMS4xMiwzLjUyLTMuMzdzLTEuNTMtMy4yNi0zLjU3LTMuMjZIOTIuMTlWMTE1M2g2LjUzWm0xLDE0Ljg5YTMuOTMsMy45MywwLDEsMC0uMDUtNy44NUg5Mi4xOXY3Ljg1aDcuNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMTUuOCwxMTM4aDkuODl2MzguNDVIMTE1LjhWMTEzOFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMjcuNjksMTE2Mi43N2MwLTguNjcsNS42MS0xNC41NCwxNC4yOC0xNC41NHMxNC4xOCw1Ljg3LDE0LjE4LDE0LjU0LTUuNTEsMTQuNTMtMTQuMTgsMTQuNTNTMTI3LjY5LDExNzEuNDgsMTI3LjY5LDExNjIuNzdabTE4LjY2LDBjMC00Ljc5LTEuNTMtNy44LTQuNDktNy44cy00LjM5LDMtNC4zOSw3LjgsMS40Myw3Ljg1LDQuMzksNy44NVMxNDYuMzUsMTE2Ny42MSwxNDYuMzUsMTE2Mi43N1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xNTcuMzIsMTE2Mi43N2MwLTguNjcsNS42MS0xNC41NCwxNC4yOC0xNC41NHMxNC4xOCw1Ljg3LDE0LjE4LDE0LjU0LTUuNTEsMTQuNTMtMTQuMTgsMTQuNTNTMTU3LjMyLDExNzEuNDgsMTU3LjMyLDExNjIuNzdabTE4LjY2LDBjMC00Ljc5LTEuNTMtNy44LTQuNDktNy44cy00LjM5LDMtNC4zOSw3LjgsMS40Myw3Ljg1LDQuMzksNy44NVMxNzYsMTE2Ny42MSwxNzYsMTE2Mi43N1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xODcuNzYsMTE0OWg5LjE4djQuMTNoMC4xNWMxLjg0LTMuMjEsNC4zMy00Ljk1LDguMjYtNC45NWE3LjY2LDcuNjYsMCwwLDEsNy4zOSw0Ljc0aDAuMTVhOS4yMSw5LjIxLDAsMCwxLDguNTItNC43NGM2LjM3LDAsOS4xMyw0LjY5LDkuMTMsMTF2MTcuMjRoLTkuNjR2LTE1LjVjMC0yLjgtLjg3LTQuNjQtMy4zMS00LjY0cy0zLjYyLDIuMjQtMy42Miw1LjJ2MTQuOTRoLTkuNjR2LTE1LjVjMC0yLjgtLjg3LTQuNjQtMy4zMS00LjY0cy0zLjYyLDIuMjQtMy42Miw1LjJ2MTQuOTRoLTkuNjRWMTE0OVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yNDIuNjksMTE3Mi44NmgtMC4xdjMuNTdoLTkuMThWMTEzOEgyNDN2MTMuODdoMC4xNWE5LjEyLDkuMTIsMCwwLDEsNy44LTMuNjdjNi44OCwwLDEwLjg2LDYuMjIsMTAuODYsMTQuNDgsMCw5LjMzLTQuMzMsMTQuNjktMTEuNDcsMTQuNjlBOC42Nyw4LjY3LDAsMCwxLDI0Mi42OSwxMTcyLjg2Wm05LjM4LTEwLjNjMC00LjQ0LTEuNjMtNy4yOS00LjU0LTcuMjlzLTQuODQsMi44Ni00Ljg0LDcuMjksMS44OSw3LjI5LDQuODQsNy4yOVMyNTIuMDcsMTE2NywyNTIuMDcsMTE2Mi41NloiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yNjMsMTE2Mi42NmMwLTguNTcsNS42Ni0xNC41MywxMy44Ny0xNC41M2ExMy4zNCwxMy4zNCwwLDAsMSw5LjY0LDMuNTdjMy4xNiwzLjA2LDQuNTksNy44NSw0LjQ5LDEzLjUxSDI3Mi42M2MwLjQxLDMuNDIsMiw1LjE1LDQuOTUsNS4xNWEzLjcsMy43LDAsMCwwLDMuNzctMi42aDkuMjhjLTEuNjMsNi4yNy02LjQ4LDkuNDQtMTMuMzYsOS40NEMyNjguNzUsMTE3Ny4yLDI2MywxMTcxLjQzLDI2MywxMTYyLjY2Wm05LjU5LTIuODZoOC43N2MtMC4xNS0zLjMxLTItNS00LjI4LTVDMjc0LjQ2LDExNTQuNzYsMjczLDExNTYuNjQsMjcyLjYzLDExNTkuODFaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODEuNzMgLTExMzcuOTgpIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMzAyLDExNTMuNjloMC4xNWMyLTMuODIsNC41OS01LjI1LDcuOS01LjI1YTMuNzIsMy43MiwwLDAsMSwxLjU4LjI1djguNDFoLTAuMmMtNS42Ni0xLTksMS42OC05LDcuODV2MTEuNDdoLTkuNjRWMTE0OUgzMDJ2NC42OVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0zMTIuNjYsMTE3Ni40OGg5LjI4YzAuMzYsMS4xNywxLjU4LDIuMzUsMy44OCwyLjM1LDMuMTEsMCw0LjE4LTEuOTQsNC4xOC00Ljc5di0yaC0wLjJhOC4yNiw4LjI2LDAsMCwxLTYuNTgsMy4xMWMtNS45MiwwLTExLjA3LTQuMzgtMTEuMDctMTMsMC03Ljg1LDQuMjMtMTQsMTAuNjEtMTQsMy42NywwLDUuOTEsMS40OCw3LjM5LDMuODJoMC4xNXYtM2g5LjE4djIzLjc2YzAsNC4zOC0xLjUzLDcuOC0zLjgyLDkuODRzLTUuODEsMy05LjY5LDNDMzE4LjY4LDExODUuNjEsMzEzLjU4LDExODIuNiwzMTIuNjYsMTE3Ni40OFptMTcuNzUtMTQuNzljMC0zLjQyLTEuNjMtNi4xNy00LjQ0LTYuMTdzLTQuNDQsMi40NS00LjQ0LDYuMTcsMS43Myw2LjMyLDQuNDQsNi4zMlMzMzAuNDEsMTE2NS4zMSwzMzAuNDEsMTE2MS42OVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43MyAtMTEzNy45OCkiLz48L3N2Zz4=');         background-repeat: no-repeat;         background-position: center;         font-size: 0;     }      .contact-us {         float: right;         margin: 0 20px;         line-height: 60px;         font-family: "BWHaasGrotesk-55Roman-Web";         font-size: 14px;         color: white;         text-decoration: underline;     }      .box {         margin: 30px auto;         padding: 30px;         width: 680px;         background-color: white;     }      @media (max-width:760px) {         .box {             width: calc(100% - 20px);         }     }      .main__heading, .info__heading {         font-family: "BWHaasGrotesk-75Bold-Web";     }      .main__heading {         font-size: 19px;         padding-bottom: 9px;     }      .continue {         font-size: 18px;     }      #px-captcha {         margin-top: 20px;         min-height: 80px;     }      .info {         border-top: dotted 1px black;         padding-top: 9px;     }      .info + .info {         margin-top: 30px;     }      .info__link {         color: black;         text-decoration: underline;     }      .info__heading {         font-size: 16px;         line-height: 20px;         padding-bottom: 9px;     }      .info__text {         padding-bottom: 9px;     }      #block_uuid {         display: inline-block;         padding: 6px;         background-color: #f2f2f2;         font-family: "BW Haas Text Mono A-55 Roman";         font-size: 14px;     }        window._pxAppId = "PX8FCGYgk4";     window._pxJsClientSrc = "/8FCGYgk4/init.js";     window._pxFirstPartyEnabled = true;     window._pxHostUrl = "/8FCGYgk4/xhr";     window._pxreCaptchaTheme = "light";     window._pxUuid = qs("uuid");      if(!window._pxUuid) {         window.pxInit = function (px) {             px.Events.one("uid", function (uuid) {                 if (uuid) {                     document.getElementById("block_uuid").innerText = "Block reference ID: " + uuid;                 }             });         };     }      function qs(name) {         var search = window.location.search;         var rx = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$  )");         var match = rx.exec(search);         return match ? decodeURIComponent(match[2].replace(/\+/g, " ")) : "";     } 

Bloomberg Need help? Contact us

We’ve detected unusual activity from your computer network To continue, please click the box below to let us know you’re not a robot.

Why did this happen? Please make sure your browser supports JavaScript and cookies and that you are not blocking them from loading. For more information you can review our Terms of Service and Cookie Policy.

Need Help? For inquiries related to this message please contact our support team and provide the reference ID below. Block reference ID:

document.getElementById("block_uuid").innerText = "Block reference ID: " + window._pxUuid; 

PD: Utilizo Firefox y Jupiter Notebook.

Duda con un array en c, me falta una cosilla

he hecho el siguiente programa el cual se introduce un número y comprobando en el vector dice que está o no está y si está dice el lugar donde se encuentra, lo que me gustaría poner para terminarlo es que al introducir el valor 0 finalice el programa,pero no lo logro ¿me ilumináis?.

un saludo

#include<stdio.h>  int main() {      int v[]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};      int i,x;     char p='f';       printf("\nintroduce un numero:\n");     scanf("%d",&x);     for(i=0;(p=='f')&&(i<15);i++)  if(v[i] == x){  p= 'v';         }  if (p=='v')         {  printf("el valor esta en el vector en la posicion %d",i-1);         }  else if (p=='f')         {  printf("NO");         }      return 0;  } 

Duda Threads en C#

Buenos días estoy estudiando C# y me he encontrado con la necesidad de hacer que mi programa haga una pausa, hasta que pasen x segundos o hasta que el mismo usuario genere un evento. He intentado trasladar mis conocimientos de threads de java a C# pero no termina de funcionar correctamente. Mi pregunta es: ¿se puede hacer una pausa en el programa y que se genere un evento bien si el usuario ha realizado una acción o bien cuando han pasado x segundos? PD: estoy trabajando realizando una aplicación de consola en .NET PD2: gracias de antemano.