gpt4 book ai didi

c - 在不使用内存操作方法(malloc...等)的情况下初始化c中的结构

转载 作者:行者123 更新时间:2023-11-30 15:23:36 25 4
gpt4 key购买 nike

我试图在不使用 malloc 或任何内存方法的情况下初始化结构指针。这样做时,当我尝试增加堆的大小时,我遇到了段错误。现在,我敢打赌我的做法是错误的。在分配 dataHeap 时,我没有初始化所有字段(我遗漏了一个结构体 Node 数组)。下面是否有正确的方法来执行此操作,或者请向我指出类似的问题?

///node_heap.h///
8 #ifndef NODE_HEAP_H
9 #define NODE_HEAP_H
10
11 #include <stdio.h>
12 #include <stdlib.h>
13
15 #define NUL '\0'
16
18 #define NUM_BITS 8
19
21 #define MAX_CODE NUM_BITS + 1
22
24 #define NSYMS 1 << NUM_BITS
25
37 typedef struct Symbol_S {
39 size_t frequency;
40
42 size_t bit;
43
45 char symbol;
46
48 char codeword[MAX_CODE];
49 } Symbol;
50
60 typedef struct Node_S {
62 size_t frequency;
63
65 size_t num_valid;
66
68 Symbol syms[NSYMS];
69
70 } Node;
71
82 typedef struct Heap_S {
84 size_t capacity;
85
87 size_t size;
88
90 Node array[NSYMS];
91 } Heap;

/////////
//Heap.c//
#include "node_heap.h"
Heap dataHeap;
void initialize_heap( Heap * heap){
dataHeap = (Heap){0,250}; //size_T size, size_T max_HeapSize, Node[255]
heap = &dataHeap;
}
increaseSize(*Heap heap){
heap->size++;
}

///////////
// Main.c//
///////////
#include "node_heap.h"
main(){
Heap* myHeap = NULL;
initialize_heap(myHeap);
increaseSize(myHeap);'
}

最佳答案

当您将变量传递给函数时,该函数会收到该变量的副本。如果您传递一个值并更改它,则更改不会反射(reflect)在函数外部。要更改指针的值,您可以传递指针的地址,然后通过该地址更改该指针。

void initialize_heap( Heap** heap)
{
dataHeap = (Heap){0,250}; //size_T size, size_T max_HeapSize, Node[255]
*heap = &dataHeap;
}

main()
{
Heap* myHeap = NULL;
initialize_heap(&myHeap);
...
}

关于c - 在不使用内存操作方法(malloc...等)的情况下初始化c中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735184/

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