将参数传递给函数时遇到了一些问题。例如:
#include <iostream>
using namespace std;
struct VShop
{
bool index;
char *fName;
char *edName;
char *genre1;
char *genre2;
double rating;
double price;
};
void AddtoDB (VShop *Film, char *name, char *ed, char *genre1, char *genre2, double rating, double price, int *size, int *element);
int main()
{
int size = 0, element = 0;
VShop *Film = new VShop[size];
AddtoDB(Film, "The Shawshank Redemption", "Frank Darabont", "Crime", "Drama", 9.2, 20, &size, &element);
cout<<size; // ERROR!
return 0;
}
void AddtoDB (VShop *Film, char *name, char *ed, char *genre1, char *genre2, double rating, double price, int *size, int *element)
{
*size++;
Film[*element].fName = name;
Film[*element].edName = ed;
Film[*element].genre1 = genre1;
Film[*element].genre2 = genre2;
Film[*element].rating = rating;
Film[*element].price = price;
*element=(*element+1);
}
每次我想获得size
或element
时,我都会收到错误。它发生了什么?感谢。
答案 0 :(得分:1)
您的代码有几处错误。首先:
VShop *Film = new VShop[size];
size
为0
,可能会失败,在您尝试访问时无效。
其次:
*size++;
++
的优先级高于*
,因此评估为:
*(size++);
同时增加大小,然后取消引用大小的旧值。你可能想要:
(*size)++;
增加int
所指向的size
的值。
答案 1 :(得分:1)
这里的内存存在很大问题。看:
您创建了零大小的数组:
VShop *Film = new VShop[size];
然后你尝试长大变量,但没有改变数组大小:
*size++; //must be (*size)++;
数组的长度仍为零,但您正在尝试更改第一个(零)元素的某些数据:
Film[*element].fName = name;
您必须在插入新元素之前调整数组大小:
另一个变体是使用std :: vector。
无论如何,在c ++和c ++中读一些关于内存管理的书。
答案 2 :(得分:0)
因为++的优先级高于*,所以这个表达式是 相当于*(大小++)。因此,它的作用是增加价值 大小(所以它现在指向下一个元素),但因为++被用作 postfix将整个表达式计算为指向的值 原始引用(指针指向之前指向的地址) 增加)。
尝试使用;
(*size)++;
这将导致表达式被评估为size指向的值增加1。