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



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

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 << "BlocktSpace" << endl;
for (int i = 0; i < sizeof(arrMemory) / sizeof(int); i++)
{
cout << i + 1 << "t" << arrMemory[i] << endl;
}
cout << "nJobs:" << endl << "JobtSize" << 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 << "nnFirst Fit:nMemory BlocktSizetJobtInternal " << " Fragmentationn" << 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 << "DefragmentationnMemory " << "BlocktSizetJobtFreeSpacen";
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)

使用了类型说明符CCD_ 1而不是表达式。

注意这样一个函数定义,其中它的参数不使用

int doFirstFit(procList*, allocList*){
//cout lang ng UI
cout << "nnFirst Fit:nMemory BlocktSizetJobtInternal " << " Fragmentationn" << endl;
//declaration ng variable
int i = 0;
allocList* memory;
//..

没有道理。

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

allocList* memory;

比如这个

memory = memory->nxt;

调用未定义的行为。

函数的调用参数为

doFirstFit(jobs, mem);

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

allocList* memory;

在我所做的分析中,错误是这个

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

否则直接传递proclist,您必须声明其指针变量,就像您为Alloclistmemory所做的那样用同样的方法解决这个

#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 << "BlocktSpace" << endl;
for (int i = 0; i < sizeof(arrMemory) / sizeof(int); i++)
{
cout << i + 1 << "t" << arrMemory[i] << endl;
}
cout << "nJobs:" << endl << "JobtSize" << 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 << "nnFirst Fit:nMemory BlocktSizetJobtInternal " << " Fragmentationn" << 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 << "DefragmentationnMemory " << "BlocktSizetJobtFreeSpacen";
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;
}

上面的工作还可以。

相关内容

最新更新