简体   繁体   中英

Malloc function doesn´t work properly

I'm getting a problem whit malloc() , don't know what's happening. I'm compiling with MinGW.

Cadena is just a typedef for char * , and leer_dato() is a function that returns a string.

Cadena leer_con_formato(const char * formato)
{
    int i = 0;
    Cadena dato = leer_dato();
    if (strlen(dato) != strlen(formato))
        return NULL;
    char * nuevo_dato = (char *)malloc(strlen(dato)); // Here's the problem
    if (!nuevo_dato)
        return NULL;
    while (dato[i] != '\0')
    {
        switch (formato[i])
    {
        case '0':
            if (!isdigit(dato[i]))
                return NULL;
            nuevo_dato[i] = dato[i];
            i++;
            break;
        case 'C':
            if (!isalpha(dato[i]))
                return NULL;
            nuevo_dato[i] = dato[i];
            i++;
            break;
        case 33 ... 47:
        case 58 ... 64:
        case 91 ... 96:
        case 123 ... 126:
            if (!ispunct(dato[i]))
                return NULL;
            nuevo_dato[i] = dato[i];
            i++;
            break;
        default:
            return NULL;
    }
}
nuevo_dato[i] = NULO;
return nuevo_dato;
}

You are not allocating enough memory. If strlen returns for example 5 , then that means that your string contains 5 chars + 1 for the terminating 0-byte. So when allocating memory for a string you'll have to do it like so:

char * nuevo_dato = (char*)malloc(sizeof(char) * (strlen(dato) + 1));

The sizeof(char) is optional.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM