gpt4 book ai didi

c - 重新分配未完成时如何发现问题

转载 作者:行者123 更新时间:2023-11-30 14:58:58 27 4
gpt4 key购买 nike

考虑以下代码:

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX_NUM 5
#define MAX_INCR 5
int main(void)
{
char check = 'y';
int max_number = MAX_NUM;
double *array_input = NULL;
int i = 0;

double buffer = 0.0;
int count = 0;
array_input = malloc(5 * (sizeof(double)));
printf("Please enter the numbers into the array: ");

for(i = 0; i < max_number; i++)
{
++count;
scanf("%lf", &buffer);
*(array_input + i) = buffer;


if(count == max_number)
{
printf("\nDo you want to input more?(y/n) ");
fflush(stdin);
if((check = tolower(getchar())) == 'y')
{

max_number += MAX_INCR;
//realloc(array_input, max_number);
continue;
}
}
}

for(int j = 0; j < max_number; j++)
{
printf("\nThe value is: %lf", *(array_input + j));
}


return 0;
}

(释放内存并不是为了保持代码简洁)
现在,这里并没有刻意进行重新分配,但程序的输出正是它应该的。
例如5.3、4.2、5.6。 7.4, 3, 2, 4, 5, 6, 7.8,程序按原样输出这些数字,就像它应该的那样。

如何判断这个程序可能存在错误?(例如:某人得到了程序,但程序员忘记了重新分配部分,以后可能会出现问题,对吧?)

最佳答案

“未定义行为”的问题在于你永远不知道。在许多情况下,就像您的程序一样,程序显然表现正常,但是一旦您进行了一点更改,它就会突然崩溃,即使更改本身是正确完成的。此类错误通常会导致安全漏洞,因为黑客可以利用它们来运行自己的代码。

有一些工具可以查找类似的错误,例如http://valgrind.org/

关于c - 重新分配未完成时如何发现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063202/

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