Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分配仅在发布时失败_C_Console_Windows 10_Codeblocks - Fatal编程技术网

C 分配仅在发布时失败

C 分配仅在发布时失败,c,console,windows-10,codeblocks,C,Console,Windows 10,Codeblocks,当调试程序时,它应该如何工作。运行发布版本时,它告诉我空间不足。为什么会发生这种情况?我如何让它在版本exe中运行 我找到了一些其他的文章,但我不知道它们有什么相似之处。 #包括 #包括 #包括 #定义数量100000//随机数的数量 #定义随机(rand()&0x1F)+(rand()pNext=NULL;//下一个元素为NULL pStart->pPrev=NULL;//prev元素为NULL pNumbers=pStart;//指向数字结构 pNumbers->uiNum=RANDOM;

当调试程序时,它应该如何工作。运行发布版本时,它告诉我空间不足。为什么会发生这种情况?我如何让它在版本exe中运行

我找到了一些其他的文章,但我不知道它们有什么相似之处。

#包括
#包括
#包括
#定义数量100000//随机数的数量
#定义随机(rand()&0x1F)+(rand()pNext=NULL;//下一个元素为NULL
pStart->pPrev=NULL;//prev元素为NULL
pNumbers=pStart;//指向数字结构
pNumbers->uiNum=RANDOM;//获取随机数
对于(i=0;ipNext==NULL)//分配失败?
{
perror(“-2”);//打印错误-2
返回-2;
}
(pNumbers->pNext)->pPrev=pNumbers;//当前元素是下一个元素的上一个元素
pNumbers=pNumbers->pNext;//下一个元素
pNumbers->uiNum=RANDOM;//随机数
pNumbers->pNext=NULL;//下一个元素为NULL
}
pLast=pNumbers;
printf(“\n…已完成生成数字\n”);
//排序(&P编号);
返回0;
}
我得到的结果是: “生成100000个随机数。。。 0,1,-2:空间不足

返回的进程-2(0xFFFFFE)”

“0,1”是它已分配的元素数。因此,它在第一次“下一个元素”分配时失败。 “-2”确认了上述陈述

预计将看到: “生成100000个随机数。。。 0,1,…(不会键入所有数字)…999899999, ……完成生成数字

执行此操作时,进程返回0“

pStart=(struct sNumStruct*)malloc(sizeof(struct sNumStruct*);

您正在分配指针的大小,如果您在64位系统上,则可能是8字节。 你应该使用:

pStart=(struct sNumStruct*)malloc(sizeof(struct sNumStruct));
(不带指针)

这将分配结构所需的大小


也许这会有帮助?

哦,是的!我记得……非常感谢!:)也许你可以在使用指针后添加一些代码来释放它们。这可能会使调试库在使用比为结构分配的空间更多的空间后有机会检测堆损坏
#include <stdio.h> 
#include <stdlib.h>
#include <time.h>

#define AMOUNT  100000                              // amount of random numbers
#define RANDOM  (rand() & 0x1F) + (rand() << 16)    // 32 bit random number

struct sNumStruct {
    unsigned int uiNum;             // number
    struct sNumStruct *pNext;       // next
    struct sNumStruct *pPrev;       // previous
};

int main()
{
    /// initializing
    srand(time(NULL));              // rand() initializer
    unsigned int i = 0;             // counter
    struct sNumStruct * pNumbers;   // pointer to number structure
    struct sNumStruct * pStart;     // pointer to start of list
    struct sNumStruct * pLast;      // pointer to end of list

    /// random number generation
    printf("Generating %d random numbers ...\n", AMOUNT);

    pStart = (struct sNumStruct*)malloc(sizeof(struct sNumStruct*));    // allocating memory for first element
    if(pStart == NULL)              // allocation failed?
    {
        perror("-1");               // print error -1
        return -1;
    }
    pStart->pNext = NULL;           // next element is NULL
    pStart->pPrev = NULL;           // prev element is NULL

    pNumbers = pStart;              // point to number structure
    pNumbers->uiNum = RANDOM;       // get random number

    for(i = 0; i < AMOUNT; i++)     // repeat AMOUNT times
    {
        printf("%d,", i);           // <---------- DEBUG
        pNumbers->pNext = (struct sNumStruct*)malloc(sizeof(struct sNumStruct*));   // allocating memory for next element
        if(pNumbers->pNext == NULL) // allocation failed?
        {
            perror("-2");           // print error -2
            return -2;
        }
        (pNumbers->pNext)->pPrev = pNumbers;    // current element is previous from next
        pNumbers = pNumbers->pNext;             // next element
        pNumbers->uiNum = RANDOM;               // random number
        pNumbers->pNext = NULL;                 // next element is NULL
    }
    pLast = pNumbers;

    printf("\n... done generating numbers\n");

    // sort(&pNumbers);

    return 0;
}