gpt4 book ai didi

c - 进程返回 -1073741819 (0xc0000005) Code::Blocks

转载 作者:行者123 更新时间:2023-12-04 11:26:05 25 4
gpt4 key购买 nike

我是使用 Code::Blocks(版本 12.11)进行 C 编程的新手,从我大学的这个学期开始,但我做到了。

我最近在类里面学习了指针、内存分配和动态数组(我的强项都不是),并将它们合并到我的程序中(并编译)

现在,当我运行程序并转到“菜单”->“添加产品”时,问题就来了,当我输入价格时程序终止并且我收到“Process Returned -1073741819 (0xc0000005)”。我做了一些研究,发现这是一个访问冲突,但我真的不知道如何纠正它。

问候

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define maxCharName 64
#define maxCharUserPass 8
#define maxCharId 5

// Product Structure
typedef struct{
char name[maxCharName];
char idCode[maxCharId];
float price;
float stock;
}product;

// DataBase of Products
typedef struct{
int sizeT;
product *array;
} TProducts;

TProducts a;


// Press any Key on the Keyboard to Proceed
void pressKeyToContinue(){
puts("\n\n\n Please Press any Key to Continue...");
getchar();
}

// Start Page
void startPage(){
puts("\n\n\n -- Welcome to WeePro Manager --\n\n");
puts(" -- Version 1.0 --\n\n\n\n");
puts(" -- Developped By: Nick --");

pressKeyToContinue();
system("cls");
}

// Program Terminator
void shutdown(){
puts("\n\n\n Good-Bye");
pressKeyToContinue(); // Awaits User Input
exit(0);
}

// Asks User Information for Verification
int userLogin(){
char userName[maxCharUserPass] = "WPuser";
char inputUserName[maxCharUserPass];

char passWord[maxCharUserPass] = "12345";
char inputPassWord[maxCharUserPass];

printf("Username? ");
scanf("%s",inputUserName); fflush(stdin);

printf("Password? ");
scanf("%s", inputPassWord); fflush(stdin);

system("cls");

if((strcmp(userName, inputUserName) == 0)&&(strcmp(passWord, inputPassWord) == 0)){
return 1;
}else{ return 0;}
}

// Lists All Products With their Respective Information
void listAll(){
int idx = 0;
puts("List:");
while((idx < a.sizeT)&&(a.array[idx].name != NULL)){
printf(":::%s ( id: %s )", a.array[idx].name, a.array[idx].idCode);
printf("Price: %6.2f eur/g", a.array[idx].price);
printf("Stock: %6.2f g", a.array[idx].stock);

idx++;
}

pressKeyToContinue();
system("cls");
}

// Input Product ID Code
char* inputIdCode(){
char* tempIdCode;
puts("ID Code?");
scanf("%s", tempIdCode);

system("cls");
return tempIdCode;
}

// Search By ID Code
int searchIdCode(){
int idx = 0;
char* tempIdCode;
tempIdCode = inputIdCode();
do{
if(strcmp(a.array[idx].idCode, tempIdCode) == 0){
return idx;
}else{
idx++;
}
}while(idx < a.sizeT);

puts("No Product With Such an ID Code!");
return -1;
}



// Input Product Name
char *inputProductName(int length){
char name[maxCharName];

puts("Product Name?");
scanf("%s", name); fflush(stdin);

system("cls");
return name;
}

// Input Product Price
float inputProductPrice(int length){
float price;

puts("Product Price?");
scanf("%f", price); fflush(stdin);

system("cls");
return price;
}

// Input Product Stock
float inputProductQuantity(int length){
float quantity;

puts("Product Stock?");
scanf("%f", quantity); fflush(stdin);

system("cls");
return quantity;
}


/////////////////
// Add Product //
/////////////////

// New Product Adder
void addProduct(){
char* tempStr;
float temp;

if(a.sizeT == 0){
a.sizeT = 1;
a.array = (product*)malloc((a.sizeT)*sizeof(product));
}else{
a.sizeT++;
a.array = (product*)realloc(a.array, (a.sizeT)*sizeof(product));
}

tempStr = inputProductName(a.sizeT);
strcpy(a.array[a.sizeT].name, tempStr);
temp = inputProductPrice(a.sizeT);
temp = inputProductQuantity(a.sizeT);

system("cls");
}

void transaction(){}


////////////////////
// Delete Product //
////////////////////

// Delete Product
void deleteProduct(){
int idx, idxPro;
char* tempIdCode;

puts("Delete Which Product?\n");
tempIdCode = inputIdCode();
idxPro = searchIdCode(tempIdCode);

idx = idxPro + 1;
while(idx < a.sizeT){
a.array[idx] = a.array[idx+1];
idx++;
}
a.array = realloc(a.array, (a.sizeT-1)*sizeof(product));
}

//Product Information Modifier
void modifyProduct(){
char choice;
int tabLength;
do{
puts("Modify What?\n");
puts(" -> [N]ame\n");
puts(" -> [P]rice\n");
puts(" -> [S]tock\n\n");
puts(" -> [R]eturn to Previous Menu"); // Prints the Menus' Options

scanf("%c", &choice);
choice = toupper(choice); // Save Users' Choice And Up Case
fflush(stdin);

switch(choice){
case 'N':
system("cls");
tabLength = searchIdCode();
inputProductName(tabLength);
break;
case 'P':
system("cls");
tabLength = searchIdCode();
inputProductPrice(tabLength);
break;
case 'S':
system("cls");
tabLength = searchIdCode();
inputProductQuantity(tabLength);
break;
case 'R':
system("cls");
returnToMenu2();
break;
default:
puts("Something Went Wrong!\n");
pressKeyToContinue();
system("cls");
}

}while(choice != 'o');
}

// Sub-Menu Interface
void menu(){
char choice;
do{
puts("Please Make Your Selection.\n");
puts(" -> [A]dd a New Product\n");
puts(" -> [M]odify a Product\n");
puts(" -> [D]elete a Product\n\n");
puts(" -> [R]eturn to Main Menu"); // Prints the Menus' Options

scanf("%c", &choice); fflush(stdin);
choice = toupper(choice); // Save Users' Choice And Up Case

switch(choice){
case 'A':
system("cls");
addProduct();
break;
case 'M':
system("cls");
modifyProduct();
break;
case 'D':
system("cls");
deleteProduct();
break;
case 'R':
system("cls");
returnToMenu1();
break;
default:
puts("Something Went Wrong!\n");
pressKeyToContinue();
system("cls");
}
}while(choice != 'o');
}

// Return To Ma

> Blockquote

in Menu
void returnToMenu2(){
menu();
}

// Main Menu
void controlPanel(){
char choice;
do{
puts("Please Make Your Selection.\n");
puts(" -> [T]ransaction\n");
puts(" -> [M]enu\n");
puts(" -> [L]ist\n");
puts(" -> [S]hutdown"); // Prints the Panels' Options

scanf("%c", &choice); fflush(stdin);
choice = toupper(choice); // Save Users' Choice And Up Case

switch(choice){
case 'T':
system("cls");
transaction();
break;
case 'M':
system("cls");
menu();
break;
case 'L':
system("cls");
listAll();
break;
case 'S':
system("cls");
shutdown();
break;
default:
puts("Something Went Wrong!\n");
pressKeyToContinue();
system("cls");
}
}while(choice != 'o');
}

// Return To Main Menu
void returnToMenu1(){
controlPanel();
}


int main(){
int loginSuccess=1;

//loginSuccess = userLogin();

switch(loginSuccess){
case 0:
shutdown();
break;

case 1:
startPage();
controlPanel();
break;
}
}

最佳答案

正在尝试通过未初始化的指针 tempIdCode 写入随机内存:

char* inputIdCode(){
char* tempIdCode;
puts("ID Code?");
scanf("%s", tempIdCode);

system("cls");
return tempIdCode;
}

在尝试写入之前,您需要为 tempIdCode 分配内存。您必须在此处使用 malloc()(并且不返回本地数组的地址):

char* tempIdCode = malloc(20);
if (tempIdCode)
{
/* The format specifier "%19s" instructs scanf()
to read at most 19 characters, one less than
allocated to allow for terminating null character
written by scanf(), to prevent potential buffer
overrun. */
scanf("%19s", tempIdCode);
}

函数的调用者必须显式检查返回的 NULL 指针。调用者还必须 free() 分配的内存。

关于c - 进程返回 -1073741819 (0xc0000005) Code::Blocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15768355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com