0

这是到目前为止我遇到的任务的全部代码:

// This program takes a quadratic from the user, and prints the solution(s) if they exist. 

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


// Define quadratic structure 

typedef struct quadratic{
    float a, b, c;
    float discriminant;
    float real_root_1;
    float real_root_2;
    float complex_root;
} Quadratic;

// 'Redefine' malloc to also check allocation of memory when called, as suggested 

void xmalloc(size_t n){
    void *p = malloc(n);
    if (p == NULL) {
        printf("\n ERROR: Unable to allocate memory! \n");
        exit(1);
    }
    return p;
}

// Following example code in lecture notes 

Quadratic *newquadratic() {

    Quadratic *q = xmalloc(sizeof *q);


    return q;
}



int main () {

    return 0;
}

现在我不太确定我在做什么,但我会在这个代码首先出现问题之后询问这个问题。在“Quadratic *q = xmalloc()”行上,我收到错误“Void value not ignored as it hould be”,但是这段代码基本上是从讲义中复制出来的,并且变量名称发生了变化!(正如我们被建议做的那样..)。我尝试删除 xmalloc 中的 void 标签,然后开始抱怨未定义的变量,所以我真的不确定发生了什么。

更一般地说,我对其中的某些部分感到困惑:即函数“Quadratic *newquadratic()”。怎么会有星星啊!?指针怎么可能是函数..?不仅如此,如果我去掉星号,似乎只有当我为返回加星号时一切都好,“return *p;”。看起来这个函数只能返回指针,但我将 Quadratic 定义为变量类型(结构),所以.. 为什么要返回指针而不是“二次”?

4

2 回答 2

2

按照目前的情况,您的 xmalloc() 函数是无用的。它分配内存但不返回任何内容,因此没有人可以使用分配的内存。

可能您犯了转录错误:

void * xmalloc(size_t n){
    void *p = malloc(n);
    if (p == NULL) {
        printf("\n ERROR: Unable to allocate memory! \n");
        exit(1);
    }

    return p;
}

如果您将 xmalloc 声明为返回 void*,则可以返回一些内容并在调用函数中使用它。

对我而言,这意味着您不了解voidvoid*之间的区别。返回 void 的函数不返回任何内容,没有可使用的值。另一方面, void* 是指向任何东西的指针,因此可以很好地表示 malloc 分配的通常有用的内存块。

于 2013-11-11T15:31:43.667 回答
0

xmalloc如果您像malloc. Quadratic然后你使用它,为一个结构分配 N 字节的内存。

于 2013-11-11T15:24:19.210 回答