【发布时间】:2016-03-17 22:51:22
【问题描述】:
因此,我正在尝试弄清楚如何做一些不同的事情,但我使用 C 的工作并不多,因此非常感谢任何帮助。
typedef int data_t;
typedef struct set {
data_t *array;
size_t capacity;
size_t size;
} set_t;
typedef data_t* set_i_t;
#define CLEAR -1
我已经得到了这个使用 malloc 并分配内存的方法:
int set_init( set_t *set, int capacity ){
set->array = (data_t*)malloc(capacity * sizeof(data_t));
if(set->array == NULL){
return 1;
}
else{
set->capacity = capacity;
set->size = 0;
return 0;
}
}
还有一个释放它的方法:
void set_free( set_t *set ){
free(set->array);
set->array = NULL;
set->capacity = set->size = 0;
}
在一个单独的方法中,我尝试将集合中的所有值设置为 -1(清除)
void set_clear( set_t *set){
int i = 0;
for (i = 0; i < set->size; i++){
set->array = CLEAR;
}
set->size = 0;
}
返回集合的大小:
int set_size( set_t set ) {
return sizeof(set->array);
}
返回容量:
int set_capacity( set_t set ) {
int capacity = set->capacity;
return capacity;
}
然后打印集合:
void set_print( set_t set ) {
//Honestly don't feel like i'm ready for this one yet.
}
如果有人可以指导我完成其中的几个,或者在这些如何工作方面给我一些帮助,那就太棒了。谢谢大家!
【问题讨论】:
-
您的问题到底是什么?您需要帮助的哪一部分以及您遇到的具体问题是什么? Stackoverflow 不是一个教程网站,最适合解决特定问题。
-
它是否编译(我可以看到错误,但想知道你已经走了多远)。请记住,在 99% 的情况下,警告都是错误
-
set::array 是指针而不是数组。如果你希望它是动态大小的,你必须 malloc() 一些空间。如果不这样做,则应改为将其设为固定大小的数组。
-
如果要清除集合中的值,为什么只清除与
set->size对应的值,而不是set->capacity?此外,set_clear()不会清除set->array的元素,它会更改指针本身,这可能不是您想要的。 -
还有一点,您的
set_clear()函数会反复覆盖指针,而不是它指向的数据。目前还不清楚您是要覆盖它还是释放它。set_size()返回指针的大小,在 amd64 上为 8 个字节,在 i386 上为 4 个字节。这几乎肯定不是你想要的。set_capacity()实在是太奇怪了。