Malloc返回0?
我正在使用Dev-C++编译器用C做一个家庭作业项目。奇怪的是,我遇到了一个Malloc返回0?,c,memory,malloc,heap,dev-c++,C,Memory,Malloc,Heap,Dev C++,我正在使用Dev-C++编译器用C做一个家庭作业项目。奇怪的是,我遇到了一个malloc函数,它返回我0,这意味着它没有堆内存。我毫不怀疑记忆已满。 我已经包括了windows.h库 这是函数中有问题的部分。printf给了我: 00000000。。。00000000 .... 005C1058 这里怎么了 typedef struct tcat { char *namec; struct tcat *nextc; struct tprod *firstp; }CTGR
malloc
函数,它返回我0
,这意味着它没有堆内存。我毫不怀疑记忆已满。
我已经包括了windows.h
库
这是函数中有问题的部分。printf给了我:
00000000。。。00000000 .... 005C1058
这里怎么了
typedef struct tcat {
char *namec;
struct tcat *nextc;
struct tprod *firstp;
}CTGR;
typedef struct tprod {
char *namep;
float price;
int qt;
struct tprod *nextp;
}PRDCT;
void Srch(int i)
{
//data base population
int k,r;
//categories of components
CTGR *p,*primc;
primc = (CTGR *)malloc(sizeof(CTGR));
primc -> namec = "Resistances";
p = primc -> nextc;
p -> namec = "Capacitors";
p -> nextc = 0;
PRDCT *q,*primRP,*primCP;
primRP = (PRDCT *)malloc(sizeof(PRDCT));
primCP = (PRDCT *)malloc(sizeof(PRDCT));
printf(" %p ... %p .... %p",primRP,primCP,primc);
getch();
可能是罪魁祸首。该值没有设置,可以是任何值,因此当您通过它赋值时,您正在写入内存中某个不可预测的位置。您有问题吗?@BillLynch,“这里出了什么问题?”@BillLynch正式的问题是
这里出了什么问题?
上下文是primRP
和primCP
打印成00000000
@GSerg:在问题中,他回答了这个问题malloc()
在无法分配您的请求时,允许返回NULL
。@BillLynch问题是,既然结构如此之小,而且内存很难接近满,为什么。事实上,我相信比约恩·芒奇的答案是正确的。OP应该通过将分配行移到顶部来验证这一点。它给了我一个有效的地址。我想这不是问题所在。而且,据我所知,这种归因是结构中的一种普通归因。这只是动态内存分配。@Gorganazvan任何地址对处理器来说都是有效的。这里不进行分配,而是让处理器相信p
现在指向tcat
,而实际上它指向内存中的一个随机位置。写到那个地方可能会绊倒马洛克,所以。。。我想这就解决了问题:p=(CTGR*)malloc(sizeof(CTGR));primc->nextc=p;
p = primc -> nextc;