.

lunes, 15 de abril de 2024

C++ - liberar memoria asignada

 #include <iostream>  

#include <cstdlib>  

using namespace std;  


int main()  

{  

    //int *r = new int[3]{1, 4, 2};

    int *r = new int;

   int i = 5;

   // r = &i;

    //int y = *r;

    

    // liberar memoria asignada arriba

    

    //free(r);//valid like 'void*' [-fpermissive]

    //delete r;//type argument given to 'delete', expected pointer

    //delete[] r;//type argument given to 'delete', expected pointer

    //-r();// 'y' cannot be used as a function


    //R/= con contenido

    // 0x7ffc2dd0d308

    // 0x7ffe7cc59408

    // 0x7fff69e790c8


     //R/= sin contenido

    // free(r); //0x55f4bb583eb0

    // delete r; //0x56415395beb0

    // delete[] r; //0x55dd62386eb0

    std::cout << r <<std::endl;

    return 0;  

}




Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.



C++ - Limpiar array

#include <iostream>

using namespace std;


int main() {

    int* ip = new int[3]{1, 4, 2};

    ip = new int[0];

    std::cout << ip[5] <<std::endl;

}





Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.



Sandbox

https://codesandbox.io/examples/package/enlighterjs 

https://codesandbox.io/p/devbox/enlighterjs-1xcj3

https://playcode.io/new


https://developer.box.com/

https://master--boxdev.netlify.app/https://master--boxdev.netlify.app/ 

https://www.codester.com/BoxDev




Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.




C++ Punteros

 Un puntero es una variable que almacena la dirección de memoria de un objeto.

  • para asignar nuevos objetos en el montón,
  • para pasar funciones a otras funciones
  • para iterar sobre elementos en matrices u otras estructuras de datos.

https://learn.microsoft.com/es-es/cpp/cpp/pointers-cpp?view=msvc-170


En esta sección

  • Punteros sin formato
  • Punteros const y volatile
  • operadores new y delete
  • Punteros inteligentes
  • Creación y uso de instancias de unique_ptr
  • Creación y uso de instancias de shared_ptr
  • Creación y uso de instancias de weak_ptr
  • Cómo: Crear y usar instancias de CComPtr y CComQIPtr


Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.




C++ Heap vs stack

Heap vs stack 
Montón vs pila

P: ¿Dónde se asignan los objetos en C#?

En C# hay dos lugares donde se puede almacenar un objeto: el montón y la pila.

Los objetos asignados en la pila están disponibles solo dentro de un marco de pila (ejecución de un método), mientras que se puede acceder a los objetos asignados en el montón desde cualquier lugar.


P: ¿Qué objetos se asignan en la pila y qué objetos se asignan en el montón?

Nota: nunca debe decir "los tipos de referencia se asignan en el montón mientras que los tipos de valor se asignan en la pila", este es un error que se repite comúnmente y activa una señal de alerta para un entrevistador experimentado.


Los tipos de referencia (clases, interfaces, delegados) siempre se asignan en el montón.


Cuando pasas un objeto de referencia como parámetro o lo asignas a una variable, de hecho estás pasando su referencia. La referencia (no el objeto referenciado) se puede asignar tanto en la pila como en el montón.


Al pasar una referencia a un objeto, estás indicando dónde se encuentra ese objeto en el montón para que tu código pueda acceder a él.


Cada vez que se pasa un objeto como referencia, se copia la referencia misma. Esto significa que puede cambiar la referencia para que apunte a un objeto diferente sin afectar el objeto anterior ni otras referencias que apunten a él. Una referencia es liviana y siempre tiene un tamaño constante (32 bits o 64 bits dependiendo del bitness del sistema operativo), por lo que copiarla (y, por lo tanto, transmitir tipos de referencia) se considera económico.


Los tipos de valor (derived from System.ValueType, e.g. int, bool, char, enum and any struct) (derivados de System.ValueType, por ejemplo, int, bool, char, enum y cualquier estructura) se pueden asignar en el montón o en la pila, dependiendo de dónde se declararon.


Si el tipo de valor se declaró como una variable dentro de un método, entonces se almacena en la pila.

Si el tipo de valor se declaró como parámetro de método, entonces se almacena en la pila.

Si el tipo de valor se declaró como miembro de una clase, entonces se almacena en el montón, junto con su padre.

Si el tipo de valor se declaró como miembro de una estructura, entonces se almacena dondequiera que se almacene esa estructura.

A partir de C#7.2, una estructura(struct) se puede declarar como estructura ref(ref struct), en cuyo caso siempre se asignará en la pila, evitando que se declare dentro de tipos de referencia.


Las instancias de tipos de valor se pasan mediante copia (a menos que se utilicen con semántica de referencia, ver más abajo). Esto significa que cada vez que se asigna un tipo de valor a una variable o se pasa como parámetro, el valor se copia.


Debido a que copiar tipos de valores puede resultar costoso según el tamaño del objeto, no se recomienda declarar objetos con mucha memoria como tipos de valores.


Dado que cada tipo en C# deriva de System.Object, los tipos de valor se pueden asignar a variables o pasar a métodos que esperan un objeto. En tales casos, el valor se copia y almacena en el montón empaquetado como un tipo de referencia, en una operación conocida como boxeo.


https://dev.to/tyrrrz/interview-question-heap-vs-stack-c-5aae#:~:text=Q%3A%20Where%20are%20objects%20allocated%20in%20C%23%3F&text=Objects%20allocated%20on%20the%20stack,can%20be%20accessed%20from%20anywhere.




Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.




Malloc (asignación de memoria dinámica C)

 Malloc (C dynamic memory allocation)

Descripción

Traducción del inglés-La asignación de memoria dinámica de C se refiere a realizar la administración de memoria manual para la asignación de memoria dinámica en el lenguaje de programación C a través de un grupo de funciones en la biblioteca estándar de C, a saber, malloc, realloc, calloc, alineado_alloc y libre.

// cstdlib se usa para usar la función malloc
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
// size_t es un tipo de datos entero que se puede asignar
    // mayor o igual a 0 valores enteros
size_t s = 0; // s is SIZE

// declaración/inicialización de malloc
int* ptr = (int*)malloc(s);

// condición de retorno si el bloque de memoria no está
    // inicializado
if (ptr == NULL) {
cout << "Null pointer has been returned";
}

//condición de impresión del mensaje si la memoria está
    // inicializado
else {
cout << "Memory has been allocated at address "
<< ptr << endl;
}

free(ptr);
return 0;
}

R/= Memory has been allocated at address 0x5568b29fceb0



Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.



C++ Puntero a la dirección del objeto &

int* p = nulo; // declaramos el puntero y lo inicializamos

                      // para que no almacene una dirección aleatoria

int i = 5;

p = &i; // asigna puntero a la dirección del objeto

int j = *p; // desreferencia p para recuperar el valor en su dirección


R/= 0x7ffe0f367d08


https://learn.microsoft.com/es-es/cpp/cpp/raw-pointers?view=msvc-170




Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.



C++ Punteros void*

Un puntero a void simplemente apunta a una ubicación de memoria sin procesar. A veces es necesario usar punteros void* , por ejemplo, al pasar entre el código de C++ y las funciones de C. Cuando se convierte un puntero con tipo en un puntero void , el contenido de la ubicación de memoria no cambia.


Cuando se usa como un tipo de valor devuelto de función, la palabra clave void especifica que la función no devuelve ningún valor. Cuando se usa para la lista de parámetros de una función, void especifica que la función no toma ningún parámetro. Cuando se usa en la declaración de un puntero, void especifica que el puntero es "universal".

Si el tipo de puntero es void*, el puntero puede apuntar a cualquier variable que no se declare con la palabra clave const o volatile. Un puntero void* no se puede desreferenciar a menos que se convierta en otro tipo. Un puntero void* se puede convertir en cualquier otro tipo de puntero de datos.

En C++, un puntero void puede apuntar a una función libre (una función que no es miembro de una clase) o a una función miembro estática, pero no a una función miembro no estática.

No se puede declarar una variable de tipo void.

Como cuestión de estilo, las directrices básicas de C++ recomiendan no usar void para especificar una lista de parámetros formal vacía. Para obtener más información, vea Directrices principales de C++ NL.25: No usar void como un tipo de argumento.

https://learn.microsoft.com/es-es/cpp/cpp/void-cpp?view=msvc-170 




Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.



C++ Desreferencia

 int j = *p; // desreferencia p para recuperar el valor en su dirección



Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.



sábado, 13 de abril de 2024

Microsoft virtual WiFi miniport adapter

 

NETSH wlan set hostednetwork mode=allow ssid=LIME key=123gjiiiyyiihh

NETSH WLAN start hostednetwork



Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.







Mostrar drivers de WLAN con terminal(cmd) en modo administrador

NETSH WLAN show drivers





Si el contenido le ha sido de utilidad, lo invitamos a hacer una donación en el siguiente botón.

La cantidad que sea de su voluntad entregar


En caso que no se visualice el contenido, hacer recargar (refresh) a la página que sea abierta.




Cálculo EC7 de Louis Leithold

  Calculo EC7 de Louis Leithold  Autor:  Louis Leithold Clic aquí para DESCARGAR