gpt4 book ai didi

c - 动态内存分配问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:45 25 4
gpt4 key购买 nike

谁能告诉我为什么这个程序会给出调试错误消息
“损坏:在 0x00430050 处的正常 block (#42)之后”。消息在 free(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;
}
}

最佳答案

您正在将 ptr 传递给您的函数,然后使用 realloc 更改它。您需要将指针传递给指针才能使其正常工作。

我建议您在调用 include 之前和之后以及调用 realloc 之前和之后打印出指针指向的地址。这应该向您展示正在发生的事情或查看下面的代码:

#include <stdio.h>

void a( int **ptrptr)
{
printf("ptrptr = %p, ptr = %p\n",ptrptr,*ptrptr) ;
*ptrptr = (int*)realloc(*ptrptr, 10*sizeof(int)) ;
printf("ptrptr = %p, ptr = %p\n",ptrptr,*ptrptr) ;
}


int main(int argc, char **argv)
{
int *ptr = malloc(5*sizeof(int)) ;
printf("ptr = %p\n",ptr) ;
a(&ptr) ;
printf("ptr = %p\n",ptr) ;
free(ptr) ;
return 0;
}

关于c - 动态内存分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com