C 分配仅在发布时失败
当调试程序时,它应该如何工作。运行发布版本时,它告诉我空间不足。为什么会发生这种情况?我如何让它在版本exe中运行 我找到了一些其他的文章,但我不知道它们有什么相似之处。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;
#包括
#包括
#包括
#定义数量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;
}