Malloc返回0?

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

我正在使用Dev-C++编译器用C做一个家庭作业项目。奇怪的是,我遇到了一个
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;