【发布时间】:2016-04-04 16:32:01
【问题描述】:
我正在做一个项目,该项目需要我将用户输入读取为整数对,然后将它们存储在一个数组中。因此,我创建了一个执行此操作的函数。但是,由于某种原因,每次输入最后一个输入时,我都会遇到分段错误。这是我的代码:
int userInput(int *arrayPtr){
int numberPairs, i, numberElements;
printf("%d", sizeof(int));
printf("How many pairs of integers? ");
scanf("%d", &numberPairs);
numberElements = numberPairs*2;
arrayPtr = malloc((numberElements*sizeof(int)) + 64);
for(i = 0; i < numberElements; i+=2){
int first,second;
printf("\nEnter pair: ");
printf("Before scanf");
scanf("%d %d", &first, &second);
printf("%d", first);
arrayPtr[i] = first;
arrayPtr[i+1] = second;
}
printf("%d", numberPairs);
return numberPairs;
}
这是我调用函数的方式:
int main(){
int *arrayPtr, numberPairs;
numberPairs = userInput(arrayPtr);
multiplyPairs(arrayPtr, numberPairs);
free(arrayPtr);
}
目前,我主要是想让 for 循环完整执行,但由于某种原因,它总是在最后一次迭代中出现段错误。例如,如果我对这些对的输入是 1 2、3 4、5 6,我的输出将是 1 3,然后是一个 seg 错误(这个输出是指 for 循环中的 print 语句)。我花了几个小时试图调试这段代码以及让其他学生查看它,但我无法弄清楚哪里出了问题。如果你能指出我正确的方向,我将不胜感激。谢谢。
更新:我将代码复制并粘贴到一个新文件中,它按预期工作。感谢所有告诉我我的代码中其他错误元素的人。
【问题讨论】:
-
您是否将
int *传递给此函数,然后期望它指向此函数分配的数组?arrayPtr = ...将arrayPtr与调用者传递的任何内容完全分离。 -
我没有通过数组指针传递任何信息。我只是在我的 main 函数中声明它,以便它具有适当的范围。因为我使用相同的arrayPtr作为其他函数的参数。
-
显示你如何调用函数。 Read this.
-
请原谅我的严厉评论,但是如果代码是松弛的重新输出格式,其中数字被塞到没有空格或换行符的字符串中,那么其余的代码可能同样马虎。请将
newlines 放在打印语句的末尾,而不是之前。一个例子是循环最后一次迭代中int的输出,该循环直接运行到之后打印的int。你怎么知道哪个数字属于哪个int? -
你试过调试器吗?调试器 == 你的朋友。