【发布时间】:2014-07-07 23:55:19
【问题描述】:
我正在尝试制作一个简单的数据库程序,但是当我到达这一行时
int idSearch(product* itens, int id) {
int i = 0;
for(i; i < size; i++) {
if(itens[i].id == id) //<=== This line
return i;
}
return ITEM_NOT_FOUND;
}
程序停止响应。 size 在程序开始时设置为全局变量
FILE* flog;
FILE* db;
FILE* sizef;
int size = 100;
这个函数被调用
void newProduct(product* itens, char name[64], int id, float price) {
int pos = idSearch(itens, 0);
if(idSearch(itens, id) != ITEM_NOT_FOUND) {
printf("Erro, o produto ja existe");
return;
}...
items 定义为
itens = (product*) calloc(sizeof(product), size);
并且产品是这样定义的struct
typedef struct{
char name[64];
int id;
float price;
int amount;
} product;
首先我认为问题在于我没有使用-> 运算符,但是当我尝试编译器时说它不对。
我在 Windows 7 x64 上使用 Code::Blocks 和 GCC 编译器
**编辑:整个代码可以在这里找到:http://hastebin.com/atulajubar.tex
希望尽快得到答复,在此先感谢
【问题讨论】:
-
第一个代码块中的
size定义在哪里?它的定义是什么? -
size被定义为在主函数中设置为 100 的全局变量。虽然它被初始化为 0 -
显示
itens的定义?也就是说,从你传递给newProduct的地方? -
很难从您的代码示例中看出这个函数的值是什么。另外,
itens是如何分配的?什么尺寸? -
习惯上将数组的大小传递给任何需要它的函数。不要依赖全局。
newProduct和idSearch都应该将适当的大小作为附加参数传递。正如所写的那样,根本不可能回答你的问题,因为你没有给出可重复的步骤,所以猜测和推测是你所能期望的最好的(顺便说一句,这不是一个好问题)。我的建议。丢失全局size使其成为数组创建者的本地变量,并在需要时将其与数组基地址一起作为参数传递。 (如果使用得当,calloc也可以)。
标签: c arrays windows struct crash