sách gpt4 ai đã đi

c - 自由(): invalid next size(normal)

In lại 作者:行者123 更新时间:2023-11-30 15:16:18 29 4
mua khóa gpt4 Nike

当使用包含 200-300 个整数(以空格分隔)的输入 .txt 文件运行此代码时,我在使用 fprintf 语句的 for 循环之前收到错误。

我不确定 qsort 是否导致了此错误或为什么会发生此错误,但如果有任何见解,我们将不胜感激。

(该文件是通过在命令行中添加输入文件和输出文件的名称来运行的,例如:./program input.txt output.txt

我的代码:

#include 
#include
#include
#include

int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

int main(int argc, char *argv[]){

if(argc != 3){
printf("\nInvalid input\nPlease provide the input and output text file names as %s name1 name2\n", argv[0]);
}khác{

printf("\nPart A: \n");
printf("..............................................................................................................\n\n");

char *fn1 = argv[1]; //variables
char *fn2 = argv[2];

int temp = 0;
int counter = 0;
int index = 0;
int index2 = 0;
int sort = 0;


FILE *fp1 = fopen(fn1, "r"); //read file
FILE *fp2 = fopen(fn2, "w"); //write file

if(fp1 == NULL){ //test if fp1 was opened
printf("There was an error opening the input file");
}

char data[10]; //ints can only hold 10 digits
int *integerArr;
int *tempPointer;

integerArr = malloc(10*sizeof(int));

int sizeOfArrs = 10;

printf("Reading in the textfile: ");

while(fscanf(fp1,"%s",data) != EOF){ //reads in the file breaking on each whitespace and ends at the EOF pointer

temp = strlen(data);
if(temp <=10){
temp = atoi(data);
integerArr[counter] = temp;

printf(".");

phản++;
if(counter == sizeOfArrs -1){

temp = sizeOfArrs * 2;

tempPointer = realloc(integerArr, temp);

if(tempPointer != NULL){
integerArr = tempPointer;
}

}
}else printf("\ninteger had too many digits\n");


}


printf(" Done\n%d Numbers were found\n", counter);
printf("The integers found in the %s file: \n", argv[1]);

index = 0; //reset index to 0;
for(index;index
printf("%d ", integerArr[index]);
}

printf("\n\nPart B\n");
printf("..............................................................................................................\n\n");


printf("The integers found in the %s file after sorting: \n", argv[1]);

qsort(integerArr, counter, sizeof(int), cmpfunc); //best function ever (sorts the array using the cmpfunc to tell if an integer is greater than less than or equal to the next one)

index = 0; //resets the index
for(index; index
printf("%d ", integerArr[index]);

fprintf(fp2,"%d ",integerArr[index]); //writes the sorted integers to the new file
}

if(fp2 == NULL){ //tests if the write worked
printf("There was an error writing the outputfile");

}

printf("\n");
close(fp1,fp2); //closes both files
}
trả về 0;
}

1 Câu trả lời

您的 fscanf 循环已损坏。您实际上并没有重新分配更大的尺寸。这是更正后的程序[很抱歉进行了迂腐的风格重新编辑,但你击中了我的一个缺点:长侧边栏评论]

#include 
#include
#include
#include

số nguyên
cmpfunc(const void *a, const void *b)
{
return (*(int *) a - *(int *) b);
}

số nguyên
main(int argc, char *argv[])
{

if (argc != 3) {
printf("\nInvalid input\nPlease provide the input and output text file names as %s name1 name2\n", argv[0]);
return 1;
}

printf("\nPart A: \n");
printf("..............................................................................................................\n\n");

char *fn1 = argv[1]; // variables
char *fn2 = argv[2];

int temp = 0;
int counter = 0;
int index = 0;
int index2 = 0;
int sort = 0;

FILE *fp1 = fopen(fn1, "r");
FILE *fp2 = fopen(fn2, "w");

// test if fp1 was opened
if (fp1 == NULL) {
printf("There was an error opening the input file");
return 1;
}

// ints can only hold 10 digits
char data[10];
int *integerArr;
int *tempPointer;

int sizeOfArrs = 10;
integerArr = malloc(sizeOfArrs * sizeof(int));

printf("Reading in the textfile: ");

// reads in the file breaking on each whitespace and ends at the EOF
// pointer
while (fscanf(fp1, "%s", data) != EOF) {
temp = strlen(data);
if (temp > 10) {
printf("\ninteger had too many digits\n");
continue;
}

temp = atoi(data);
integerArr[counter] = temp;

printf(".");

phản++;
if (counter == sizeOfArrs - 1) {
sizeOfArrs += 600;
integerArr = realloc(integerArr, sizeOfArrs * sizeof(int));
}
}

// trim array to actual size needed
sizeOfArrs = counter;
integerArr = realloc(integerArr, sizeOfArrs * sizeof(int));

printf(" Done\n%d Numbers were found\n", counter);
printf("The integers found in the %s file: \n", argv[1]);

// prints the unsorted contents of the file
for (index = 0; index < counter; index++) {
printf("%d ", integerArr[index]);
}

printf("\n\nPart B\n");
printf("..............................................................................................................\n\n");

printf("The integers found in the %s file after sorting: \n", argv[1]);

// best function ever (sorts the array using the cmpfunc to tell if an
// integer is greater than less than or equal to the next one)
qsort(integerArr, counter, sizeof(int), cmpfunc);

// prints the sorted contents of the file
for (index = 0; index < counter; index++) {
printf("%d ", integerArr[index]);

// writes the sorted integers to the new file
fprintf(fp2, "%d ", integerArr[index]);
}

// tests if the write worked
if (fp2 == NULL) {
printf("There was an error writing the outputfile");

}

printf("\n");

// closes both files
fclose(fp1);
fclose(fp2);

trả về 0;
}

另外,请注意底部的 fclose。还有一些小错误等待您发现。

关于c - 自由(): invalid next size(normal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159081/

29 4 0
Bài viết được đề xuất: c - 返回 C 中二叉树中节点的父节点
Bài viết được đề xuất: Android NDK C 预处理器为 TARGET_PLATFORM 定义
Bài viết được đề xuất: c# - 无法从存储过程中获取值
Bài viết được đề xuất: javascript - 无法提交扩展数据 View 的自定义字段
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com