Может ли кто-нибудь сказать мне, почему эта программа дает ошибку отладки с сообщением
«ПОВРЕЖДЕНИЕ: после обычного блока (# 42) на 0x00430050». Сообщение генерируется на линии бесплатно (ptr);
Я полагаю, что проблема связана с перераспределением памяти.Проблема с перераспределением динамической памяти
#include<stdio.h>
#include<stdlib.h>
#define DELTA 5
void include(int d,int* p,int n,int k,int flag);
void main(void)
{
int *ptr;
int i=0,digit,koef=1;
ptr=(int *)malloc(DELTA*sizeof(int));
fp=fopen("test.txt", "r"))
do{
fscanf(fp,"%d",&digit);
if (!(i % DELTA))
koef++;
if(i<(DELTA*koef))
include(digit,ptr,i,koef,1);
else
include(digit,ptr,i,koef,2);
i++;
}
}while(!feof(fp));
free(ptr);
}
void include(int d,int* p,int n,int k,int flag)
{
switch(flag){
case 1: *(p+n)=d;break;
case 2: if((p=(int *)realloc(p,k*DELTA*sizeof(int)))==NULL){
printf("Error!Memory not allocated!\n");
exit(1);
}
*(p+n)=d;break;
}
}
Вы должны уменьшить код до некоторой небольшой версии, которая вызывает ошибку. Как это довольно сложно. –
Realloc не должен вызывать такую проблему, но я тоже столкнулся с проблемой при ее использовании. В общем, я предпочитаю делать что-то вроде этого: int * tmp = malloc (new_size); memcpy (tmp, ptr, old_size); Бесплатно (ptr); ptr = tmp; Не знаю, если это вообще полезно здесь ... – mingos