c - 意外的 realloc() 行为

标签 c realloc

作为一个更大程序的一部分,我有一个计算多项式导数系数的方法。但这不是问题:)。在下面的代码中,如果我跳过 realloc() 调用,我会在 (*coef) 中得到我期望的结果。使用 realloc 时,其中一个元素设置为 0。这是我的错,还是 realloc() 行为实际上是意外的?

void derive (double **coef, int size)
{
    int i;
    if (size<2)
        free_vector (*coef);
    else
    {
        for (i=0; i<size-1; ++i)
        {
            (*coef)[i] = (*coef)[i+1]*(i+1);
        }
        (*coef) = realloc ((*coef), size-1);
    }   
}

如果运行它会有所帮助,我还会附上完整的测试程序源代码......

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double *new_vector (int size)
{
    double *vec = calloc (size, sizeof (double));
    return vec;
}

void free_vector (double *vec)
{
    if (vec)
    {
        free (vec);
        vec = NULL;
    }
}

void write_vector (FILE *f, double *vec, int size)
{
    int i;
    for (i=0; i<size; ++i)
        fprintf (f, "%1.15lf\n", vec[i]);
    fprintf (f, "\n");
}

void derive (double **coef, int size)
{
    int i;
    if (size<2)
        free_vector (*coef);
    else
    {
        for (i=0; i<size-1; ++i)
        {
            (*coef)[i] = (*coef)[i+1]*(i+1);
        }
        (*coef) = realloc ((*coef), size-1);
    }   
}

int main (void)
{
    double *v = new_vector (5);
    int i;
    for (i=0; i<5; ++i)
        v[i] = 3;
    write_vector (stdout, v, 5);
    derive (&v, 5);
    write_vector (stdout, v, 4);
    free_vector (v);
    return 0;
}

最佳答案

Realoc 需要一些字节。

realloc ((*coef), (size-1) * sizeof(double));
                           ^^^^^^^^^^^^^^^^

关于c - 意外的 realloc() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585832/

相关文章:

c - 括号表达式的赋值

c - 结构内的指针重新分配正常,但指向结构内指针的指针无法重新分配,并出现无效指针错误

c - 我的程序在递归函数中使用 realloc() 就崩溃了

c# - C 和 C# 的 ANSI 字符处理

java - 编译器如何计算数学表达式?

第一次 scanf 后 C 程序崩溃

正确的二维数组内存分配/解除分配?

c - 调用realloc后是否需要初始化(设置为0)内存?

c - 从 C 中的字节数组读取时处理字节序?

c - GCC __attribute__((mode(XX)) 实际上做了什么?