-4
最近、動的プログラミングの基礎を理解しようとしていましたが、ヒープ破損に関するいくつかの問題に直面しています。メモリを解放しようとすると、コードが壊れます。 私はインターネット上でいくつかの調査をしました。私はいくつかの未割り当てのメモリ空間に書き込むので、私はこのメッセージを受け取りました。しかし、私はまだ間違いがどこにあるか、またはそれを修正する方法を知らない。通常ブロック(#164)の後でヒープの破損が検出されました
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <fstream>
std::ifstream f("file.in");
void read(int *a, int &n)
{
f >> n;///scanf("%d", &n);
int i;
for (i = 0; i < n; i++)
f >> a[i];/// scanf_s("%d", &a[i]);
}
int main()
{
int *a, *b, *c;
int na = 0, nb = 0;
int i = 0, j = 0, k = 0, kk = 1, p;
a = (int*)malloc(na*sizeof(int));
b = (int*)malloc(nb*sizeof(int));
c = (int*)malloc(kk * sizeof(int));
read(a, na);
read(b, nb);
while (i < na && j < nb)
{
if (a[i] < b[j])
{
kk++;
c = (int*)realloc(c, kk * sizeof(int));
c[k] = a[i];
k++;
i++;
}
else
{
kk++;
c = (int*)realloc(c, kk * sizeof(int));
c[k] = b[j];
k++;
j++;
}
}
if (i < na)
for (p = i; p < na; p++)
{
kk++;
c = (int*)realloc(c, kk*sizeof(int));
c[k++] = a[p];
}
if (j < nb)
for (p = j; p < nb; p++)
{
kk++;
c = (int*)realloc(c, kk *sizeof(int));
c[k++] = b[p];
}
for (i = 0; i < k; i++)
printf("%d ", c[i]);
free(a);
free(b);
free(c);
}
してください[MCVE]を提供するために、[編集]あなたの質問この行は理にかなっているように、コードを並べ替えます。 –
** na **と** nb **はnullです(0に等しい)ので、あなたは 'malloc(na * sizeof(int))'を実行するときにメモリを割り当てません。 * nb ** –
私は以前にC++を学んだ後、Cの学習をしています。それがあなたを気にしたら、すみません。 –