【发布时间】:2021-05-04 18:21:34
【问题描述】:
问题是不能编译带有“atoi”的行。如果我尝试调试我的代码,则会出现此语句“A5(动态内存分配).exe 中 0x7C17F2F6 (ucrtbased.dll) 处的未处理异常:将无效参数传递给认为无效参数致命的函数。”
我想我没有错过 atoi 部分的任何一件事。我正在使用视觉工作室,这会是问题吗?要不要改程序??
这是代码:
#include <stdio.h>
#include <stdlib.h>
double arith_seq(double*, int, int);
int main(int argc, char* argv[])
{
double* in;
int num;
num = atoi(argv[1]);
in = (double*)malloc((num+1) * sizeof(double));
if (in == NULL)
{
num = 1;
arith_seq(&in, num, 0.1);
}
//if there is no input
else
{
in[0] = 0;
arith_seq(&in, num, 0.1);
}
//in normal case
printf("My last array element is : %f", in[num - 1]);
//print the last element of the array
free(in);
return 0;
}
double arith_seq(double* parr, int size, int com)
{
for (int i = 1; i < size; i++)
{
parr[i] += parr[i - 1] + com;
}
return *parr;
}
【问题讨论】:
-
不要忽略编译器给你的警告
-
我认为代码中的
atoi一定已经编译过了。在访问argv之前,请务必检查argc。 -
'arith_seq' 需要一个指向“double”的指针作为第一个参数,您正在传递一个指向“double”的指针。而不是传递“&in”,而是传递“in”
-
首先,在检查
argc以确保argv中的元素有效之前,切勿使用``argv`的任何元素。 -
⟼请记住,尤其是在 Stack Overflow 上学习和提问时,尽可能让代码保持井井有条是很重要的。 Consistent indentation 有助于传达结构,更重要的是,有助于传达意图,这有助于我们快速找到问题的根源,而无需花费大量时间尝试解码正在发生的事情。