gpt4 book ai didi

c - 指向动态结构数组的指针赋值

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:27 26 4
gpt4 key购买 nike

基本上,我要做的就是将某些东西(多项式)分配给给定索引处的动态数组,覆盖其中的任何内容。为简单起见,我只是让 subtract() 返回指向 polynomialArray 中第一个元素的指针。所以,这段代码应该复制第一个元素的内容并替换另一个元素(我知道深度复制是必要的,这是在减法中实现的)。我被 java 宠坏了(还有你们这些好心人)...

当我在它被复制到的索引处打印它时,那里什么也没有。通常会打印类似 Poly1 = 2x^3 + 4x 的内容,但它只会打印 Poly1 =

可以正常编译并运行,但没有执行我需要的操作。编辑:如果该索引中没有任何内容,则运行良好。如果索引处有问题,则段错误。

//Portion of main from another file
Polynomial* subtracted = subtract(op1_index, op2_index);
insert(subtracted, diff_index);
printPolynomial(diff_index);

//Methods in question (utils file)
void insert(Polynomial* element, int index) {
if(index > num_polynomial) {
polynomialArray = (Polynomial*)realloc(polynomialArray, (index + 1) * sizeof(Polynomial));
}
free(polynomialArray[index].polynomialTerm);
polynomialArray[index] = *element; // Problem here?
}

Polynomial* subtract(int op1_index, int op2_index) {
return &polynomialArray[0];
}

//Typedefs accessible in main and utils file
typedef struct term {
int exponent;
int coefficient;
} Term;

typedef struct polynomial {
Term *polynomialTerm;
} Polynomial;



//variables accessible in utils file
static Polynomial *polynomialArray;
int num_polynomial; // counter to keep track of the number of polynomials

最佳答案

我认为问题出在这里 free(polynomialArray[index].polynomialTerm); 如果 index > num_polynomial,那么这里的值 polynomialArray[index].polynomialTerm 是垃圾.你不需要释放它。相反,你应该这样写:

void insert(Polynomial* element, int index) {
if(index >= num_polynomial) { /* probably should be >= depends on your implementation */
polynomialArray = (Polynomial*)realloc(polynomialArray, (index + 1) * sizeof(Polynomial));
}
else
{
free(polynomialArray[index].polynomialTerm);
}
polynomialArray[index] = *element;
}

另外,这有点冒险。主要有两个原因:

  1. 如果索引更大,则不增加 num_polynomial。
  2. 您不知道索引有多大,因此您可能会分配更大的内存,稍后,如果您尝试达到之前的 num_polynomial 和新大小之间的任何值,您将获得未知区域,并可能再次出现段错误。

关于c - 指向动态结构数组的指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5426212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com