c++ - 如何修复 "error:expected primary-expression before ‘,’ token ”

标签 c++ compiler-errors function-definition unused-variables

我正在尝试制作第一个适合的内存管理代码,但每次我尝试运行它时,我总是在输出中得到不完整的结果和这些错误

error:expected primary-expression before ‘,’ token

我不知道在代码中添加什么内容来解决此错误

#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;
}

这是我评论错误的部分,我不知道我做错了什么

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

请大家帮忙,非常感谢!

最佳答案

在此函数中调用

search(procList,memory->fk_pid - 1)

使用类型说明符procList而不是表达式。

注意这样的函数定义不使用其参数

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;
    //..

没有意义。

此外,还使用了未初始化的指针

allocList* memory;

在像这样的表达式中

memory = memory->nxt;

调用未定义的行为。

该函数的调用参数为

 doFirstFit(jobs, mem);

因此您需要在函数中使用传递的参数,而不是像这样声明局部变量

allocList* memory;

关于c++ - 如何修复 "error:expected primary-expression before ‘,’ token ”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70595286/

相关文章:

c++ - 你如何获得网格的顶点缓冲区?

C 中指针变量的冲突类型(错误)

java - 在保存文件之前,不会删除自定义编译器错误(修复后)

c - 使用二分查找查找已排序字符串中的第一个大写字母

C++:为什么在另一个函数中允许函数声明而不是函数定义?

c++ - 一直运行到某个值链表

c++ - 如何将非静态类成员 `std::bind` 转换为 Win32 回调函数 `WNDPROC`?

c++ - Ctrl+鼠标左键点击事件捕获Qt

java - Java和Javac在cmd中不起作用。 java和javac “is not recognized as an internal..”

c++ - switch 语句中第一个 case 之前的代码