进程以 return 值 255 退出,w/pointers 到结构
Process exited with return value 255, w/pointers to structures
我有一些函数可以让我管理一个动态分配的结构。内存的分配和其中的数据输入不是真正的问题,尽管我的程序在到达特定代码行时停止:(未检测到警告或问题)
if(codeV == p_vendite[ctrl_j].p_venditore[ctrl_i].codVenditore)
此行位于名为 VenditeProdotto(Vendite *p_vendite)
的函数中。
这是代码的重要部分(定义结构)
typedef struct _Venditore {
int codVenditore;
int codProdotto;
int qty;
} Venditore;
typedef struct _Vendite{
int mmGG;
Venditore *p_venditore;
} Vendite;
void AggiungiVendita (Vendite *p_vendite);
void VenditeProdotto(Vendite *p_vendite);
void VenditeVenditore(Vendite *p_vendite);
...
这是main()
:
int main() {
int check, i, count, flag, choice;
Vendite *p_Vendite;
...
...
p_Vendite = (Vendite*) calloc(numVenditori,sizeof(Vendite));
...
...
p_Vendite->p_venditore = (Venditore*)calloc(numVenditori,sizeof(Venditore));
/*menu*/
flag = TRUE;
do{
choice = menu();
switch (choice) {
case 1 : AggiungiVendita(p_Vendite); break;
...
case 3 : VenditeProdotto(p_Vendite); break;
case 4 : VenditeVenditore(p_Vendite); break;
...
}
} while (flag == TRUE);
return 0;
}
函数如下:
void AggiungiVendita (Vendite *p_vendite) {
int flag, check, answer;
i = 0;
do{
/*input of struct - codVenditore,codProdotto,qty*/
...
check = scanf("%d", &(p_vendite[j].p_venditore[i].codVenditore));
...
/*input*/
check = scanf("%d", &(p_vendite[j].p_venditore[i].codProdotto) );
...
/*controllo sull'input*/
check = scanf("%d", &(p_vendite[j].p_venditore[i].qty) );
...
...
//asking to redo or quit
} while(flag == TRUE && i < numVenditori);
return;
}
int menu() {
//just a standard menu, no problem here
...
return choice;
}
void VenditeProdotto(Vendite *p_vendite) {
int check = 0, codeP = 0, ctrl_i = 0, ctrl_j = 0; //ctrl_i,ctrl_j are increasing variables and I use them to search among the structures
...//input, continues after
我在哪里找到调试错误:(此后的第 3 行)
for(ctrl_j = 0; ctrl_j < numVendite; ctrl_j++) {
for(ctrl_i = 0; ctrl_i < numVenditori; ctrl_i++) {
if (codeP == p_vendite[ctrl_j].p_venditore[ctrl_i].codProdotto)
printf("\nSeller %d, quantity sold: %d in day %d", p_vendite[ctrl_j].p_venditore[ctrl_i].codVenditore, p_vendite[ctrl_j].p_venditore[ctrl_i].qty, ctrl_j+1);
else
continue;
}
}
return;
}
基本上我不知道使用我谈到的第一行代码是否真的合法,使用 .
而不是 ->
,但是如果我尝试更改语法我检测到错误。有什么想法吗?
起初我想到了类似 (p_vendite+ctrl_j)->(p_venditore+ctrl_i)->codProdotto
的东西,因为它是一个指针,但它似乎不起作用。
有几个明显的错误:
分配 Vendite
您正在为 p_Vendite
分配 numVenditori
个元素,但稍后您在同一个指针上迭代 numVendite
次:
p_Vendite = (Vendite*) calloc(numVenditori,sizeof(Vendite));
...
for(ctrl_j = 0; ctrl_j < numVendite; ctrl_j++) {
for(ctrl_i = 0; ctrl_i < numVenditori; ctrl_i++) {
if (codeP == p_vendite[ctrl_j].p_venditore[ctrl_i].codProdotto)
分配应为:
p_Vendite = (Vendite*) calloc(numVendite,sizeof(Vendite));
或者如我所愿:
p_Vendite = calloc (numVendite, sizeof *p_Vendite);
分配 Venditore
p_Vendite->p_venditore = (Venditore*)calloc(numVenditori,sizeof(Venditore));
您仅为 Vendite
结构中的 一个 分配 p_venditore
元素。您需要在循环中分配所有这些:
for (int j = 0; j < numVendite; j++) {
p_Vendite[j].p_venditore = (Venditore*)calloc(numVenditori,sizeof(Venditore));
// And check for allocation errors
}
我有一些函数可以让我管理一个动态分配的结构。内存的分配和其中的数据输入不是真正的问题,尽管我的程序在到达特定代码行时停止:(未检测到警告或问题)
if(codeV == p_vendite[ctrl_j].p_venditore[ctrl_i].codVenditore)
此行位于名为 VenditeProdotto(Vendite *p_vendite)
的函数中。
这是代码的重要部分(定义结构)
typedef struct _Venditore {
int codVenditore;
int codProdotto;
int qty;
} Venditore;
typedef struct _Vendite{
int mmGG;
Venditore *p_venditore;
} Vendite;
void AggiungiVendita (Vendite *p_vendite);
void VenditeProdotto(Vendite *p_vendite);
void VenditeVenditore(Vendite *p_vendite);
...
这是main()
:
int main() {
int check, i, count, flag, choice;
Vendite *p_Vendite;
...
...
p_Vendite = (Vendite*) calloc(numVenditori,sizeof(Vendite));
...
...
p_Vendite->p_venditore = (Venditore*)calloc(numVenditori,sizeof(Venditore));
/*menu*/
flag = TRUE;
do{
choice = menu();
switch (choice) {
case 1 : AggiungiVendita(p_Vendite); break;
...
case 3 : VenditeProdotto(p_Vendite); break;
case 4 : VenditeVenditore(p_Vendite); break;
...
}
} while (flag == TRUE);
return 0;
}
函数如下:
void AggiungiVendita (Vendite *p_vendite) {
int flag, check, answer;
i = 0;
do{
/*input of struct - codVenditore,codProdotto,qty*/
...
check = scanf("%d", &(p_vendite[j].p_venditore[i].codVenditore));
...
/*input*/
check = scanf("%d", &(p_vendite[j].p_venditore[i].codProdotto) );
...
/*controllo sull'input*/
check = scanf("%d", &(p_vendite[j].p_venditore[i].qty) );
...
...
//asking to redo or quit
} while(flag == TRUE && i < numVenditori);
return;
}
int menu() {
//just a standard menu, no problem here
...
return choice;
}
void VenditeProdotto(Vendite *p_vendite) {
int check = 0, codeP = 0, ctrl_i = 0, ctrl_j = 0; //ctrl_i,ctrl_j are increasing variables and I use them to search among the structures
...//input, continues after
我在哪里找到调试错误:(此后的第 3 行)
for(ctrl_j = 0; ctrl_j < numVendite; ctrl_j++) {
for(ctrl_i = 0; ctrl_i < numVenditori; ctrl_i++) {
if (codeP == p_vendite[ctrl_j].p_venditore[ctrl_i].codProdotto)
printf("\nSeller %d, quantity sold: %d in day %d", p_vendite[ctrl_j].p_venditore[ctrl_i].codVenditore, p_vendite[ctrl_j].p_venditore[ctrl_i].qty, ctrl_j+1);
else
continue;
}
}
return;
}
基本上我不知道使用我谈到的第一行代码是否真的合法,使用 .
而不是 ->
,但是如果我尝试更改语法我检测到错误。有什么想法吗?
起初我想到了类似 (p_vendite+ctrl_j)->(p_venditore+ctrl_i)->codProdotto
的东西,因为它是一个指针,但它似乎不起作用。
有几个明显的错误:
分配 Vendite
您正在为 p_Vendite
分配 numVenditori
个元素,但稍后您在同一个指针上迭代 numVendite
次:
p_Vendite = (Vendite*) calloc(numVenditori,sizeof(Vendite)); ... for(ctrl_j = 0; ctrl_j < numVendite; ctrl_j++) { for(ctrl_i = 0; ctrl_i < numVenditori; ctrl_i++) { if (codeP == p_vendite[ctrl_j].p_venditore[ctrl_i].codProdotto)
分配应为:
p_Vendite = (Vendite*) calloc(numVendite,sizeof(Vendite));
或者如我所愿:
p_Vendite = calloc (numVendite, sizeof *p_Vendite);
分配 Venditore
p_Vendite->p_venditore = (Venditore*)calloc(numVenditori,sizeof(Venditore));
您仅为 Vendite
结构中的 一个 分配 p_venditore
元素。您需要在循环中分配所有这些:
for (int j = 0; j < numVendite; j++) {
p_Vendite[j].p_venditore = (Venditore*)calloc(numVenditori,sizeof(Venditore));
// And check for allocation errors
}