【发布时间】:2016-12-02 15:18:54
【问题描述】:
我是 c 中动态分配的新手,在调用 free() 函数时遇到堆损坏错误。
整个代码应该模拟重新分配函数realloc(),直到最后都可以正常工作。我在调试器模式下逐步运行代码多次,最后出现错误。如果有人可以帮助我,我将不胜感激。
#include <stdlib.h>
#include <stdio.h>
void realocare(int **v, int n,int m)
{
int *aux;
unsigned int i;
aux = (int*)malloc(m*sizeof(int));
for (i = 0; i < m; i++)
aux[i] = v[i];
*v = (int*)malloc(n*sizeof(int));
for (i = 0; i < m; i++)
v[i] = aux[i];
free(aux);
}
void afisare(int *v, int n,int i)
{
for (i = 0; i < n; i++)
printf_s("%d ", v[i]);
printf_s("\n");
}
int main()
{
int *v;
unsigned int n,i,m;
scanf_s("%u", &n);
v = (int*)malloc(n*sizeof(int));
for (i = 0; i < n; i++)
scanf_s("%d", &v[i]);
m = n;
printf("%d", m);
afisare(v, n, i);
n++;
realocare(&v, n,m);
v[n - 1] = 9000;
afisare(v, n, i);
free(v);
return 0;
}
【问题讨论】:
-
提示:看
realocare(v, n,m); -
realocare:v = (int*)malloc(n*sizeof(int));:它不会更改调用方的变量。 -
即使
realocare()没有写越界的风险(在@alk 的回答中描述),它除了泄漏内存之外并没有做任何事情。 -
OT:所有对
malloc()的强制转换在 C 语言中都是无用的。放弃它们吧。
标签: c dynamic malloc free dynamic-allocation