I want to dynamically allocate only a portion of a character array.
So part of an array of size 100 is concrete. Say 10 is permanent memory, the other 90 is dynamic memory.
I made some attempt to read character by character until I decided to give up and take a shortcut idea I thought would work. However I end up getting an error that is
incorrect checksum for freed object - object was probably modified after being freed
I use this method in a while loop in main and I pretty much free everything after the while loop processes. Because, I have the declaration outside of the while loop. I wanted to read an object in a while loop session since these objects end up being added into a list of objects. However the scope of the while loop causes segmentation problems, it cannot remember anything about the object. (I digress).
Here is my attempt.
Object* read(char* str)
{
    Object* object = (Object*)malloc(sizeof(*object));
    object->identity[0] = 0;
    int capacity = (100 + 1) - (10);
    object->name = (char*)malloc(capacity * sizeof(*object->name));
    object->value = 0.0;
    int length = strlen(str);
    if (length > capacity)
        object->name = (char*)realloc(object->name, (capacity * 2) * sizeof(*object->name));
    int arguments = sscanf(str, "%" STRING_SPACE "s %lf %[^\n]s",
        object->identity,
        &object->value,
        object->name);
    if (arguments == MATCHER) {
        return object;
    } else {
        return NULL;
    }
    return object;
}
In this case, an object has a variable sized name but a fixed amount of space allocated for its identity.
I tried something else with sscanf but realized it will never work because I read the string too late to assign memory to name. See; 
/*
int len = 0;
for (char* itemObserve = item->name; *itemObserve; itemObserve++) {
    if (len == sizeof(item->name)) {
        capacity *= MULTIPLIER;
        item->name = (char*)realloc(item->name, capacity * sizeof(*item->name));
    }
    len++;
}
*/
Here is the code in main, everything undefined is probably irrelevant to the bug:
int main()
{
    FILE* stream;
    Object* object;
    ObjectList* list = initList();
    while (true) {
        char* line;
        char cmd[15] = {0};
        char* arg;
        char* rest;
        printf("> ");
        line = getline(stdin);
        arg = (char*)malloc(35 * sizeof(*arg));
        rest = (char*)malloc(35 * sizeof(*rest));
        int arguments = sscanf(line, "%s %s %[^\n]", cmd, arg, rest);
        free(line);
        line = NULL;
        printf("\n");
        if (strcmp(cmd, "add") == 0) {
            arg = (char*)realloc(arg, (35 * 2) * sizeof(*arg));
            sprintf(arg, "%s %s", arg, rest);
            if ((object = read(arg)) == NULL) {
                continue;
            }
            objectListAdd(list, object);
        } else {
            free(rest);
            free(arg);
            exit(EXIT_SUCCESS);
        }
        free(rest);
        free(arg);
    }
    freeObject(object);
    freeObjectList(list);
    return EXIT_SUCCESS;
}
Separate getline function in main file
char* getline(FILE* stream)
{
    int capacity = LINE_MAX + 1;
    char* buffer = (char*)malloc(capacity * sizeof(*buffer));
    int len = 0;
    int ch;
    while ((ch = fgetc(stream)) != '\n' && (ch != EOF)) {
        if (len == capacity) {
            capacity *= MULTIPLIER;
            buffer = (char*)realloc(buffer, capacity * sizeof(*buffer));
        }
        buffer[len++] = ch;
    }
    if (ch == EOF) {
        return NULL;
    }
    buffer[len] = '\0';
    if (buffer == NULL)
        return NULL;
    return buffer;
}
There are other conditionals which work as a kind of command switch but they are irrelevant to the errors my program is exhibiting. This much I have narrowed the problem down to.
