2

I am trying to make a first fit memory management code but everytime I try to run it I keep getting incomplete results in the output and these errors

error:expected primary-expression before ‘,’ token

I don't know what to put in the code to resolve this error

#include"stdafx.h"
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<iostream>
#include<memory.h>
#include <cstdlib>

using namespace std;

struct allocList
{
    char* startAlloc;
    char* endAlloc;
    int fk_pid;
    allocList *nxt;
};

struct procList
{
    int pid;
    int jobstatus;
    char *startProc;
    char *endProc;
    procList *nxt;
};

bool initProc(procList*&, int*, int);
bool initAlloc(allocList*&, int*, int);
int doFirstFit(procList*, allocList*);
int cmptFragmentation(procList*, allocList*);
int search(procList*, int);
bool reset(procList*, allocList*);

int main()
{
    int arrMemory[] = { 100, 500, 200, 300, 600 };
    int arrJobs[] = { 212, 17, 112, 426, 500 };

    allocList *ptrAllocStart = NULL;
    procList *ptrProcStart = NULL;
    initAlloc(ptrAllocStart, arrMemory, (sizeof(arrMemory) / sizeof(int)));
    initProc(ptrProcStart, arrJobs, (sizeof(arrJobs) / sizeof(int)));
    cout << "Memory Block: " << endl << "Block\tSpace" << endl;

    for (int i = 0; i < sizeof(arrMemory) / sizeof(int); i++)
    {
        cout << i + 1 << "\t" << arrMemory[i] << endl;
    }

    cout << "\nJobs:" << endl << "Job\tSize" << endl;

    for (int i = 0; i < sizeof(arrJobs) / sizeof(int); i++)
    {
        cout << i + 1 << "\t" << arrJobs[i] << endl;
    }
    int jobLoaded = 0;
    int fragmentation = 0;

    jobLoaded = doFirstFit(ptrProcStart, ptrAllocStart);
    fragmentation = cmptFragmentation(ptrProcStart, ptrAllocStart);
    allocList* memtrav = ptrAllocStart;
    getch();

    return 0;
}

bool initProc(procList*& ptrProcStart, int* ptrArrProc, int length){
int i; 
procList *ptrProc=ptrProcStart; 

for(i=0; i<length; i++){
if(ptrProc != NULL){
ptrProc->nxt=new procList; 
ptrProc = ptrProc->nxt; ptrProc->startProc=(char*)malloc(*(ptrArrProc+i)); 
ptrProc->endProc=ptrProc->startProc + *(ptrArrProc+i); 
memset(ptrProc->startProc,'a'+i,*(ptrArrProc+i)); 
ptrProc->jobstatus=0;
ptrProc->pid=i; 
ptrProc->nxt=NULL;
}
else
{
ptrProc=new procList; 
ptrProc->startProc=(char*)malloc(*(ptrArrProc+i)); 
ptrProc->endProc=ptrProc->startProc + *(ptrArrProc+i);
memset(ptrProc->startProc, 'a'+i, *(ptrArrProc+i));
ptrProc->jobstatus=0;
ptrProc->pid=i;
ptrProc->nxt=NULL;
ptrProcStart = ptrProc;}}
return true; }



bool initAlloc(allocList*& ptrAllocstart, int* ptrArrAlloc, int length)
{
//cout << "loading function initAlloc"<< "\t" << length << endl;
    int i;
    allocList* ptrAlloc = ptrAllocstart;

    for (i = 0; i < length; i++)
    {
        //cout << "running loop 1st"<< "\t" << i << endl;
        if (ptrAlloc != NULL)
{
        ptrAlloc -> nxt = new allocList; 
        ptrAlloc = ptrAlloc->nxt;
        //cout << "after new ptrAlloc" << endl;
        ptrAlloc->startAlloc=(char*)malloc(*(ptrArrAlloc+i)); 
        ptrAlloc->endAlloc=ptrAlloc->startAlloc + *(ptrArrAlloc+i); 
        memset(ptrAlloc->startAlloc,'a'+i,*(ptrArrAlloc+i)); 
        ptrAlloc->nxt=NULL;
    }
    else
    {   //cout << "inside else"<< "\t" << i << endl;
        ptrAlloc= new allocList;
        ptrAlloc->startAlloc-(char*)malloc(*(ptrArrAlloc+i)); 
        ptrAlloc->endAlloc-ptrAlloc->startAlloc + *(ptrArrAlloc+i); 
        memset(ptrAlloc->startAlloc, 'a'+i, *(ptrArrAlloc+i));
        ptrAlloc->nxt=NULL; 
        ptrAllocstart=ptrAlloc;
        }

    }
return true;
}

int doFirstFit(procList*, allocList*){
    //cout lang ng UI
    cout << "\n\nFirst Fit:\nMemory Block\tSize\tJob\tInternal " << " Fragmentation\n" << endl;
    //declaration ng variable
    int i = 0;
    allocList* memory;
    //mag do while sa memory n walang laman?
    while (memory != NULL)
        i++;
        cout << "\t" << i << "\t" << memory->endAlloc - memory->startAlloc << "\t"
    << memory->fk_pid << "\t" 
    //<< memory->endAlloc - memory->startAlloc - search(procList,memory->fk_pid - 1)
    << endl; 
   memory = memory->nxt;

    return 0;
}

int search(procList* job, int id)
{
    int size = 0;

    while (job != NULL)
    {
        if (job->pid == id)
        {
            size =atoi(job->endProc) - atoi(job->startProc);
            break;
        }

        job = job->nxt;
    }
    return size;
}

int cmptFragmentation(procList * jobs, allocList * mem)
    {
    allocList* memtrav, * temp;
    procList* jobtrav;
    jobtrav = jobs;
    memtrav = mem;
    int freespace = 0, memsize, jobsize;
    int i = 0;

    while (memtrav->nxt != NULL)
    {
        if (memtrav->nxt->fk_pid == 0)
        {
            freespace += (memtrav->nxt->endAlloc - memtrav->nxt->startAlloc);
            temp = memtrav->nxt;
            memtrav->nxt = memtrav->nxt->nxt; delete temp;
        }

        memtrav = memtrav->nxt;
    }

    if (memtrav->fk_pid == 0)
    {
        freespace += (memtrav->endAlloc - memtrav->startAlloc);
        memtrav = memtrav->nxt;
    }
    memtrav = mem;

    while (memtrav != NULL)
    {
        jobsize = search(jobs, memtrav->fk_pid - 1);
        memsize = memtrav->endAlloc - memtrav->startAlloc;

        if (memtrav->fk_pid != 0)
        {
            memtrav->endAlloc = memtrav->startAlloc + jobsize;
        }
        freespace += (memsize - jobsize);
        memtrav = memtrav->nxt;
    }
    memtrav = mem;

    while (memtrav != NULL)
    {
        if (memtrav->nxt == NULL)
        {
            memtrav->nxt = new allocList;
            memtrav = memtrav->nxt;
            memtrav->startAlloc = (char*)malloc(freespace);
            memtrav->endAlloc = memtrav->startAlloc + freespace;
            memset(memtrav->startAlloc, 0, freespace);
            memtrav->fk_pid = 0;
            memtrav->nxt = NULL;
            break;
        }
        memtrav = memtrav->nxt;
    }
    memtrav = mem;

    cout << endl << endl << "Defragmentation\nMemory " << "Block\tSize\tJob\tFreeSpace\n";

    while (memtrav != NULL)
    {
        i++;

        cout << "\t" << i << "\t" << memtrav->endAlloc - memtrav->startAlloc << "\t" << memtrav->fk_pid
            << "\t" << memtrav->endAlloc - memtrav->startAlloc - search(jobs, memtrav->fk_pid - 1) << endl;

        memtrav = memtrav->nxt;
    }

    while (jobtrav != NULL)
    {
        if (jobtrav->jobstatus == 0)
        {
            doFirstFit(jobs, mem);
            cmptFragmentation(jobs, mem);
        }

        jobtrav = jobtrav->nxt;
    }
    return 0;
}

bool reset(procList* jobs, allocList* mem)
{
    procList* tempj = jobs;
    allocList* tempa = mem;
    while (jobs->nxt != NULL)
    {
        jobs = jobs->nxt;
        free(tempj);
        tempj = jobs;
    }

    free(tempj);

    while (mem->nxt != NULL)
    {
        mem = mem->nxt;
        free(tempa);
        tempa = mem;
    }
    free(tempa);
    return true;
}

This is the part where I commented where the error has an issue with and I don't know what I'm doing wrong

<< memory->endAlloc - memory->startAlloc - search(procList,memory->fk_pid - 1)

Please help, thank you so much!

Vlad from Moscow
  • 301,070
  • 26
  • 186
  • 335
rebekah tanag
  • 21
  • 1
  • 3
  • 1
    please include the error message in the question. In the line `.... memory->startAlloc - search(procList, ...` the `procList` is a type, is it a typo? (though anyhow it is unclear what that line is supposed to achieve) – 463035818_is_not_an_ai Jan 05 '22 at 15:21
  • yes I intended to do that, though if it is also a concern I would change it too, thank you for pointing it out! – rebekah tanag Jan 05 '22 at 15:27

2 Answers2

2

In this function call

search(procList,memory->fk_pid - 1)

there is used the type specifier procList instead of an expression.

Pay attention to that such a function definition where its parameters are not used

int doFirstFit(procList*, allocList*){
    //cout lang ng UI
    cout << "\n\nFirst Fit:\nMemory Block\tSize\tJob\tInternal " << " Fragmentation\n" << endl;
    //declaration ng variable
    int i = 0;
    allocList* memory;
    //..

does not make a sense.

Moreover there is used uninitialized pointer

allocList* memory;

in expressions like for example this

memory = memory->nxt;

that invokes undefined behavior.

The function is called with arguments as

 doFirstFit(jobs, mem);

So you need use the passed arguments within the function instead of declaring local variables like this

allocList* memory;
Vlad from Moscow
  • 301,070
  • 26
  • 186
  • 335
0

In the analysis I've done the error is this

memory->endAlloc - memory->startAlloc - search(procList,memory->fk_pid - 1)

otherwise direct passing of proclist, you must declare its pointer variable just like you did for Alloclist memory; by same way you'll resolve this

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<iostream>
#include<memory.h>
#include <cstdlib>

using namespace std;

struct allocList
{
    char* startAlloc;
    char* endAlloc;
    int fk_pid;
    allocList *nxt;
};

struct procList
{
    int pid;
    int jobstatus;
    char *startProc;
    char *endProc;
    procList *nxt;
};

bool initProc(procList*&, int*, int);
bool initAlloc(allocList*&, int*, int);
int doFirstFit(procList*, allocList*);
int cmptFragmentation(procList*, allocList*);
int search(procList*, int);
bool reset(procList*, allocList*);

int main()
{
    int arrMemory[] = { 100, 500, 200, 300, 600 };
    int arrJobs[] = { 212, 17, 112, 426, 500 };

    allocList *ptrAllocStart = NULL;
    procList *ptrProcStart = NULL;
    initAlloc(ptrAllocStart, arrMemory, (sizeof(arrMemory) / sizeof(int)));
    initProc(ptrProcStart, arrJobs, (sizeof(arrJobs) / sizeof(int)));
    cout << "Memory Block: " << endl << "Block\tSpace" << endl;

    for (int i = 0; i < sizeof(arrMemory) / sizeof(int); i++)
    {
        cout << i + 1 << "\t" << arrMemory[i] << endl;
    }

    cout << "\nJobs:" << endl << "Job\tSize" << endl;

    for (int i = 0; i < sizeof(arrJobs) / sizeof(int); i++)
    {
        cout << i + 1 << "\t" << arrJobs[i] << endl;
    }
    int jobLoaded = 0;
    int fragmentation = 0;

    jobLoaded = doFirstFit(ptrProcStart, ptrAllocStart);
    fragmentation = cmptFragmentation(ptrProcStart, ptrAllocStart);
    allocList* memtrav = ptrAllocStart;
    getch();

    return 0;
}

bool initProc(procList*& ptrProcStart, int* ptrArrProc, int length){
int i; 
procList *ptrProc=ptrProcStart; 

for(i=0; i<length; i++){
if(ptrProc != NULL){
ptrProc->nxt=new procList; 
ptrProc = ptrProc->nxt; ptrProc->startProc=(char*)malloc(*(ptrArrProc+i)); 
ptrProc->endProc=ptrProc->startProc + *(ptrArrProc+i); 
memset(ptrProc->startProc,'a'+i,*(ptrArrProc+i)); 
ptrProc->jobstatus=0;
ptrProc->pid=i; 
ptrProc->nxt=NULL;
}
else
{
ptrProc=new procList; 
ptrProc->startProc=(char*)malloc(*(ptrArrProc+i)); 
ptrProc->endProc=ptrProc->startProc + *(ptrArrProc+i);
memset(ptrProc->startProc, 'a'+i, *(ptrArrProc+i));
ptrProc->jobstatus=0;
ptrProc->pid=i;
ptrProc->nxt=NULL;
ptrProcStart = ptrProc;}}
return true; }



bool initAlloc(allocList*& ptrAllocstart, int* ptrArrAlloc, int length)
{
//cout << "loading function initAlloc"<< "\t" << length << endl;
    int i;
    allocList* ptrAlloc = ptrAllocstart;

    for (i = 0; i < length; i++)
    {
        //cout << "running loop 1st"<< "\t" << i << endl;
        if (ptrAlloc != NULL)
{
        ptrAlloc -> nxt = new allocList; 
        ptrAlloc = ptrAlloc->nxt;
        //cout << "after new ptrAlloc" << endl;
        ptrAlloc->startAlloc=(char*)malloc(*(ptrArrAlloc+i)); 
        ptrAlloc->endAlloc=ptrAlloc->startAlloc + *(ptrArrAlloc+i); 
        memset(ptrAlloc->startAlloc,'a'+i,*(ptrArrAlloc+i)); 
        ptrAlloc->nxt=NULL;
    }
    else
    {   //cout << "inside else"<< "\t" << i << endl;
        ptrAlloc= new allocList;
        ptrAlloc->startAlloc-(char*)malloc(*(ptrArrAlloc+i)); 
        ptrAlloc->endAlloc-ptrAlloc->startAlloc + *(ptrArrAlloc+i); 
        memset(ptrAlloc->startAlloc, 'a'+i, *(ptrArrAlloc+i));
        ptrAlloc->nxt=NULL; 
        ptrAllocstart=ptrAlloc;
        }

    }
return true;
}

int doFirstFit(procList*, allocList*){
    //cout lang ng UI
    cout << "\n\nFirst Fit:\nMemory Block\tSize\tJob\tInternal " << " Fragmentation\n" << endl;
    //declaration ng variable
    int i = 0;
    allocList* memory;
    procList*ab;
    //mag do while sa memory n walang laman?
    while (memory != NULL)
        i++;
        int mem=memory->fk_pid - 1;
        cout << "\t" << i << "\t" << memory->endAlloc - memory->startAlloc << "\t"<< memory->fk_pid << "\t"<< memory->endAlloc - memory->startAlloc - search(ab,mem)<< endl; 
   memory = memory->nxt;

    return 0;
}

int search(procList* job, int id)
{
    int size = 0;

    while (job != NULL)
    {
        if (job->pid == id)
        {
            size =atoi(job->endProc) - atoi(job->startProc);
            break;
        }

        job = job->nxt;
    }
    return size;
}

int cmptFragmentation(procList * jobs, allocList * mem)
    {
    allocList* memtrav, * temp;
    procList* jobtrav;
    jobtrav = jobs;
    memtrav = mem;
    int freespace = 0, memsize, jobsize;
    int i = 0;

    while (memtrav->nxt != NULL)
    {
        if (memtrav->nxt->fk_pid == 0)
        {
            freespace += (memtrav->nxt->endAlloc - memtrav->nxt->startAlloc);
            temp = memtrav->nxt;
            memtrav->nxt = memtrav->nxt->nxt; delete temp;
        }

        memtrav = memtrav->nxt;
    }

    if (memtrav->fk_pid == 0)
    {
        freespace += (memtrav->endAlloc - memtrav->startAlloc);
        memtrav = memtrav->nxt;
    }
    memtrav = mem;

    while (memtrav != NULL)
    {
        jobsize = search(jobs, memtrav->fk_pid - 1);
        memsize = memtrav->endAlloc - memtrav->startAlloc;

        if (memtrav->fk_pid != 0)
        {
            memtrav->endAlloc = memtrav->startAlloc + jobsize;
        }
        freespace += (memsize - jobsize);
        memtrav = memtrav->nxt;
    }
    memtrav = mem;

    while (memtrav != NULL)
    {
        if (memtrav->nxt == NULL)
        {
            memtrav->nxt = new allocList;
            memtrav = memtrav->nxt;
            memtrav->startAlloc = (char*)malloc(freespace);
            memtrav->endAlloc = memtrav->startAlloc + freespace;
            memset(memtrav->startAlloc, 0, freespace);
            memtrav->fk_pid = 0;
            memtrav->nxt = NULL;
            break;
        }
        memtrav = memtrav->nxt;
    }
    memtrav = mem;

    cout << endl << endl << "Defragmentation\nMemory " << "Block\tSize\tJob\tFreeSpace\n";

    while (memtrav != NULL)
    {
        i++;

        cout << "\t" << i << "\t" << memtrav->endAlloc - memtrav->startAlloc << "\t" << memtrav->fk_pid
            << "\t" << memtrav->endAlloc - memtrav->startAlloc - search(jobs, memtrav->fk_pid - 1) << endl;

        memtrav = memtrav->nxt;
    }

    while (jobtrav != NULL)
    {
        if (jobtrav->jobstatus == 0)
        {
            doFirstFit(jobs, mem);
            cmptFragmentation(jobs, mem);
        }

        jobtrav = jobtrav->nxt;
    }
    return 0;
}

bool reset(procList* jobs, allocList* mem)
{
    procList* tempj = jobs;
    allocList* tempa = mem;
    while (jobs->nxt != NULL)
    {
        jobs = jobs->nxt;
        free(tempj);
        tempj = jobs;
    }

    free(tempj);

    while (mem->nxt != NULL)
    {
        mem = mem->nxt;
        free(tempa);
        tempa = mem;
    }
    free(tempa);
    return true;
}

The above working just fine.

Mitul
  • 59
  • 5