gpt4 book ai didi

C 指针指向错误的对象

转载 作者:行者123 更新时间:2023-11-30 14:20:02 26 4
gpt4 key购买 nike

在我的代码中,我有一个包含 10 个分数对象的数组,出于测试目的,我只想编辑该数组中的第一个分数。我的.h文件如下:

/*frac_heap.h*/

/*typedefs*/

typedef struct
{
signed char sign;
unsigned int denominator;
unsigned int numerator;
}fraction;

typedef struct
{
unsigned int isFree;
}block;

void dump_heap();
void init_Heap();
fraction* new_frac();

在我的 .c 文件中,内容如下:

// File frac_heap.c
#include <stdio.h>
#include <stdlib.h>
#include "frac_heap.h"

#define ARRAYSIZE 10

fraction* heap[ARRAYSIZE] = {};
block* freeBlocks[ARRAYSIZE] = {};
int startingBlock = 0;

void init_Heap(){
int x;
for(x = 0; x < ARRAYSIZE; x ++){
block *currBlock = &freeBlocks[x];
currBlock->isFree = 1;
}

}
void dump_heap(){
int x;
for(x = 0; x < ARRAYSIZE; x ++){
fraction* tempFrac = &heap[x];
printf("%d\t%d\t%d\n",tempFrac->sign, tempFrac->numerator, tempFrac->denominator);
}

}

fraction* new_frac(){
fraction* testFraction = &heap[0];
return testFraction;
}

int main(){

init_Heap();

fraction *p1;
p1 = new_frac();
p1->sign = -1;
p1->numerator = 2;
p1->denominator = 3;
dump_heap();
return 0;
}

dump_heap() 的输出应列出 10 个分数(它们的符号、分子和分母),其中分数 1 是唯一发生更改的分数。但是,输出如下:

-1  2   3
3 0 2
2 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

当我只有指向分数 1 的指针作为 p1 时,如何编辑分数 2 和 3?我使用的指针错误吗?

最佳答案

您需要对结构进行 malloc() 或定义固定大小的分数数组(如果大小是固定的。

替代方案#1:

fraction heap[ARRAYSIZE][10] = {};

替代方案#2:

fraction* heap[ARRAYSIZE] = {};

void init_Heap(){
int x;
for(x = 0; x < ARRAYSIZE; x ++){
block *currBlock = &freeBlocks[x];
currBlock->isFree = 1;

/*MALLOC FRACTIONS*/
heap[x] = (fraction*)malloc( sizeof(fraction));
heap[x]->numerator=0;
heap[x]->denominator=0;
heap[x]->sign=0;
}
}

void dump_heap(){
...
fraction* tempFrac = heap[x]; /*You cannot de-reference heap*/
...
}

fraction* new_frac(){
...
fraction* testFraction = heap[0];
...
}

关于C 指针指向错误的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850089/

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