【发布时间】:2019-08-14 13:23:52
【问题描述】:
在调试程序时,它会按预期运行。运行发布版本时,它告诉我空间不足。为什么会发生这种情况,我怎样才能让它在发布 exe 中运行?
我找到了一些其他文章,但我不知道相似之处在哪里。 C malloc weird behavior on debug/release
#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;
}
我得到的输出是: “生成100000个随机数...... 0,1,-2:空间不足
进程返回 -2 (0xFFFFFFFE)"
“0,1”是它分配了多少元素。所以它在第一个“下一个元素”分配时失败。 "-2" 确认了上面的陈述
预计会看到: “生成100000个随机数...... 0,1, ....(不会输入所有数字)... 99998,99999, ... ...完成生成数字
进程返回 0"
【问题讨论】:
-
也许你可以添加一些代码来释放你的指针。这可能使调试库有机会在使用比您为结构分配的空间更多的空间后检测堆损坏
标签: c console windows-10 codeblocks