程序在free()函數調用中觸發斷點。嘗試使用free()處理動態數組時斷點
調試程序返回該消息:
HEAP [C_C.exe]:在00498240 50 C_C.exe的00498298過去請求的大小改性堆塊已經觸發一個斷點。
我不明白爲什麼免費()觸發斷點如果一切似乎是正確的......
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int* aloca_vetor(int control)
{
int *vetor;
vetor = (int *)malloc((control * sizeof(int)));
return vetor;
}
int main()
{
int *vetor;
int Input[2];
int testes;
int control;
int i, j, w = 0;
scanf("%d", &testes);
while (testes != 0)
{
scanf("%d%d", &Input[0], &Input[1]);
control = ((Input[1] - Input[0]) + 2);
vetor = aloca_vetor(control);
if (vetor == NULL)
{
printf("No memory!");
}
for (i = 2; i < control; i++)
{
vetor[i] = TRUE;
}
for (i = 2; i < control; i++)
{
if (vetor[i] == TRUE)
{
j = 0;
for (w = 0; j < (control - 1); w++)
{
j = i*i + w*i;
vetor[j] = FALSE;
}
}
}
for (i = 0; i < control; i++)
{
if (vetor[i] == TRUE)
{
printf("%d\n", i);
}
}
testes--;
free(vetor);
}
return 0;
}
標準警告:不要將'void *'強制轉換爲'malloc'和朋友返回的!還可以使用'stdbool.h'類型/常量作爲布爾值。自定義'#define's et。人。不應該再使用了。 – Olaf
總是檢查'scanf'的結果! – Olaf
請告訴我們您正在使用的輸入信息,以便我們重現問題。但對於初學者來說:'j = i * i + w * i;'當用作索引時,你確定不會溢出'vetor'嗎? – kaylum