简体   繁体   English

如何修复“错误:','标记之前的预期主表达式”

[英]How to fix "error:expected primary-expression before ‘,’ token"

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我正在尝试制作第一个适合 memory 管理代码,但每次我尝试运行它时,我都会在 output 和这些错误中得到不完整的结果

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!请帮忙,非常感谢!

In this function call在这个 function 通话中

search(procList,memory->fk_pid - 1)

there is used the type specifier procList instead of an expression.使用类型说明符procList而不是表达式。

Pay attention to that such a function definition where its parameters are not used注意这样一个 function 定义没有用到它的参数

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 function 被称为 arguments

 doFirstFit(jobs, mem);

So you need use the passed arguments within the function instead of declaring local variables like this所以你需要在 function 中使用传递的 arguments 而不是像这样声明局部变量

allocList* memory;

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;否则直接传递 proclist,你必须声明它的指针变量,就像你为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.以上工作正常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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