c - 当我返回 2 个结构时,程序收到信号 SIGTRAP
问题描述
我试图读取这 2 个文件并将其内容存储到 2 个不同的结构中,因此我的程序不需要一遍又一遍地读取它,问题是当我尝试运行这两个结构时程序崩溃,当我尝试调试它时,它显示标题的错误,但是如果我尝试仅运行产品文件或销售文件,它可以正常工作并显示结果。
编码:
#include <stdlib.h>
#include <stdio.h>
typedef struct sellsFile{
int year, month, day, code;
float sell_amount, price;
}sells;
typedef struct productsFile{
int code;
float stock_amount, uni_price, profit;
char type;
}products;
productsFile *read_productsFile(int *q);
sellsFile *read_sellsFile(int *q);
int main(){
int productsSize, sellsSize;
products *v_products;
sells *v_sells;
v_products = read_productsFile(&productsSize);
for(int cont=0;cont<productsSize;cont++){
printf("%d;%c;%.2f;%.2f;%.2f;\n",v_products[cont].code, v_products[cont].type,v_products[cont].stock_amount,v_products[cont].uni_price,v_products[cont].profit);
}
printf("\n\n\n");
v_sells = read_sellsFile(&sellsSize);
for(int cont=0;cont<sellsSize;cont++){
printf("%d/%d/%d %d %.2f %.2f\n",v_sells[cont].year,v_sells[cont].month,v_sells[cont].day,v_sells[cont].code,v_sells[cont].sell_amount,v_sells[cont].price);
}
}
productsFile *read_productsFile(int *q){
(*q) = 0;
FILE *archive;
products *result;
int code;
float stock_amount, uni_price, profit;
char type;
archive = fopen("products.txt", "r");
while(fscanf(archive,"%d;%c;%f;%f;%f;",&code,&type,&stock_amount,&uni_price,&profit) != EOF){
(*q)++;
result = (products *)realloc(result, sizeof(products) * (*q));
result[(*q)-1].code = code;
result[(*q)-1].type = type;
result[(*q)-1].stock_amount = stock_amount;
result[(*q)-1].uni_price = uni_price;
result[(*q)-1].profit = profit;
}
return(result);
}
sellsFile *read_sellsFile(int *q){
int year, month, day, code;
float sell_amount, price;
sells *result;
*q = 0;
FILE *archive;
archive = fopen("sells.txt","r");
while(fscanf(archive,"%d;%d;%d;%d;%f;%f;",&year,&month,&day,&code,&sell_amount,&price) != EOF){
(*q)++;
result = (sells *)realloc(result,sizeof(sells) * (*q));
result[(*q)-1].year = year;
result[(*q)-1].month = month;
result[(*q)-1].day = day;
result[(*q)-1].code = code;
result[(*q)-1].price = price;
result[(*q)-1].sell_amount = sell_amount;
}
return(result);
}
产品文件示例:
12100;P;17.400;2.30;38.80;
12200;P;25.000;23.70;13.58;
12300;P;16.090;17.48;12.75;
销售文件示例:
2015;1;1;15800;114.000;5.07;
2015;1;1;15600;9.000;9.79;
2015;1;1;12800;32.483;9.71;
解决方案
result
从这行代码中给出未初始化的值:
sells *result;
此代码导致未定义的行为:
result = (sells *)realloc(result,sizeof(sells) * (*q));
asresults
以未知值开头。
推荐阅读
- java - 从 S3 解压缩并读取 gz 文件 - Scala
- spring-security - spring-security saml2:如何获取当前用户?
- javascript - 如何修复 onSnapshot 中的未捕获错误:FirebaseError:查询需要索引。关于动态排序?
- ruby-on-rails - Redmine 插件开发 - 如何避免插件之间重复的表名和模型名
- html - 背景图像调整高度
- java - 'JsonSyntaxException:com.google.gson.stream.MalformedJsonException:第 1 行第 30 列的未终止对象'
- docker - 无交换限制支持 - docker 引擎
- google-colaboratory - rfind() 似乎在 Google Colab 中不起作用
- c# - 数组拆分场景
- javascript - How do I combine two objects based off unique similarities in key names?