C - *** glibc检测到***. /333:realloc():无效的下一个大小:0x0804b008 ***


#include <stdio.h>
#include <stdlib.h>
#define ALFA 4
int simVarDiscr(int* nr, int l, int nrm) {
    int k = 0, i = 1;
    double p, q;
    q = (double)ALFA / (ALFA + l - 1);
    p = (double)nr[1] / (ALFA + l - 1);
    double F = p;
    double u = genrand_real3(); // random number in (0,1) dont matter this
    if (u > q)
        return nrm + 1;
    else {
        while (u > F) {
            k++;
            p = (double)nr[i] / (ALFA + l - 1);
            i++;
            F += p;
        }
        return k;
    }
}
int main() {
    int* nr, i, nrm, a;
    nr = (int*)malloc(1 * sizeof(int));
    nr[0] = 1;
    nrm = 1;
    for (i = 1; i <= 10; i++) {
        a = simVarDiscr(nr, i, nrm);
        if (a > nrm) {
            nrm++;
            nr = (int*)realloc(nr, (nrm + 1) * sizeof(int));
            nr[nrm] = 1;
        } else {
            nr[a]++;
        }
        printf("%d --- %dn", a, nr[i]);
    }
    return 1;
}

嗨,我有这个错误:

*** glibc detected *** ./333: realloc(): invalid next size: 0x0804b008 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6dffb)[0xb7759ffb]
/lib/libc.so.6(+0x71640)[0xb775d640]
/lib/libc.so.6(realloc+0xf3)[0xb775ec43]
./333[0x8048876]
/lib/libc.so.6(__libc_start_main+0xfe)[0xb7702c0e]
======= Memory map: ========

我想从simVarDisc给出的nr增加一个数字。这与中国的餐厅流程类似。如果SimVarDisc的返回值大于nrm,我想在nr中重新分配。我被困在这里,像这样的其他问题在SO上不起作用…

如果我打印

printf("%d——%dn", a, nr[i]);

显示:

2—00 - 13 - 1

谢谢大家。

检查数组索引a是否大于数组大小nrm。但是您需要做的是检查是否等于或更大。

在大小为1的数组中唯一可以访问的元素是索引0。

相关内容

  • 没有找到相关文章