所以我对编程还很陌生,有时候我会很乱,所以请多多包涵。
我试图创建一个处理两个不同数组的程序,并且试图创建一个向其中一个添加项目的函数,但是我遇到了麻烦,该程序的运行方式类似于:
#include <stdio.h>
#include <stdlib.h>
void insert(int **queue, int *cont, int *item); //the idea is to
// call the array i want to add the item to,
// the counter for that respective array, and the scanned
// item to be added
void instructions();
int main(int argc, char *argv[]) {
int i=0, j=0; //counters for each array
int value; //scanned value to insert
int op;
int *queue1[10], *queue2[10]; //the arrays i'm going to use
while (op!=0){
instructions();
scanf("%d", &op);
switch(op) {
case 1:
printf("You've chosen to enqueue an item, please insert the item you want to add to the array:\n" );
scanf("%d", &value);
insert(queue1,&i,&value); //here's the case for adding
// an item to array one, i called the array, its
//counter and the value i want to insert
break;
default :
if (op!=0)
printf("Invalid Option.\n" );
}
}
return 0;
}
void insert(int **queue, int *count, int *item){
if(*count==9){
printf("You can't add more items.");
}else{
*queue[*count]=item;
*count=(*count+1);
}
}
void instructions(){
printf("What function do you want to use?\n1)Insert Queue 1.\n2)Remove Queue 1.\n3)Print Queue 1.\n4)Insert Queue 2.\n5)Remove Queue 2.\n6)Insert Queue 2.\n0)Exit.\n");
}
如您所见,该程序杂乱无章的指针和东西,我四处张望,阅读了有关函数的页面和页面,但是在应用了我的想法之后,我找不到任何可以帮助我实现目标的东西知道了,这就是我最终的混乱。计数器似乎可以正常工作,并且每次使用该函数时都会增加,这是我想要的,但是,当我尝试在指令函数后放置一个printf("%d\n", queue1[0]);
来告诉我该值是否确实已插入数组时,它在使用功能大约 3 次以“添加” 随机后,显示了一个非常奇怪的数字,甚至对我来说都不是地址。数组中的数字,程序只会崩溃。
所以,如果有人可以帮助我,一个完整的菜鸟,了解我做错了什么,以便我解决这个烂摊子,我将不胜感激。
答案 0 :(得分:1)
您只是不为“队列”元素分配任何内存。
insert(queue1,&i,&value);
将i
和value
作为int
类型的局部变量,当您将指针填充到数组中时,将一次又一次使用相同的内存位置。
void insert(int **queue, int *count, int *item){
if(*count==9){
printf("You can't add more items.");
}else{
*queue[*count]=item;
*count=(*count+1);
}
}
在此函数中,您将从调用方处接收到局部变量的地址。
当您将item
分配给数组的元素时,它将从调用函数中指向value
。
然后,您将使用相同的地址填充数组的每个元素。
另一个问题:
queue1
未初始化,包含10个随机地址。
*queue[*count]=item;
您在这里取消引用那些导致崩溃的地址。
您需要为每个新元素分配内存。
int *queue1[10];
...
insert(queue1, &i, value);
...
void insert(int **arr, int *count, int value){
if(*count==9){
printf("You can't add more items.");
}else{
int *item = malloc(sizeof(*item));
if (item != NULL)
{
*item = value;
arr[*count]=item;
*count=(*count+1);
}
else
{
printf("memory allocation error\n");
}
}
}
或者...
使用数组时,您可能会直接存储值而无需进行任何分配
int queue1[10];
...
insert(queue1, &i, value);
...
void insert(int *arr, int *count, int item){
if(*count==9){
printf("You can't add more items.");
}else{
arr[*count]=item;
*count=(*count+1);
}
}