【发布时间】:2019-11-01 01:35:38
【问题描述】:
所以我试图在 C 中实现一个 arrayList,但我遇到了一些错误。当主函数的for循环中i为4时,调用insertArrayList插入数字4。将4插入我的内容数组后,我的数组的前5个元素分别为0,1,2,3,4。但是在我调用 PrintArray 之后,我数组中的第一个元素更改为 6422016。我不知道为什么会这样。任何帮助,将不胜感激。谢谢。
#include <stdlib.h>
#include <math.h>
struct ArrayList{
int numItemsInserted;
int size;
int *contents;
};
void initializeArrayList(struct ArrayList *a, int size){
(*a).numItemsInserted= floor(size / 2);
(*a).size = size;
(*a).contents = malloc(sizeof(int) * size);
}
void PrintArray(struct ArrayList *a){
for (int i = 0 ; i < (*a).numItemsInserted; i++){
printf("%i ", (*a).contents[i]);
}
printf("\n");
}
struct ArrayList insertArrayList(struct ArrayList *a, int num){
if((*a).numItemsInserted == (*a).size){
int newContents[(*a).size * 2];
for (int i = 0; i < (*a).size; i++){
newContents[i] = (*a).contents[i];
}
(*a).contents = newContents;
(*a).size *= 2;
}
(*a).contents[(*a).numItemsInserted] = num;
(*a).numItemsInserted += 1;
PrintArray(a);
}
int main() {
struct ArrayList a1;
initializeArrayList(&a1, 1);
for (int i =0; i < 10; i ++){
if (i == 1){
printf("a");
}
insertArrayList(&a1, i);
}
return 0;
}```
【问题讨论】:
-
第一,原型;
struct ArrayList insertArrayList(struct ArrayList *a, int num)应该写成返回一个指向结构体的指针:struct ArrayList * insertArrayList(...其次,因为它不是void函数,它需要在底部有一个 return 语句来返回你最终决定使用的任何类型。