调用此函数时,我始终遇到分段错误11
void flexibleArray(int *array, int *length) {
int cnt = 0, number = 0;
while (number!=-1) {
printf("\nInsert the variable :"); scanf("%d", &number);
if (number!=-1){
cnt++;
array = realloc(array, cnt * sizeof(int));
array[cnt-1] = number;
}
}
*length = cnt;
}
为
int *array = NULL, arrayLength;
flexibleArray(array, &arrayLength);
这是我一直使用的一个非常简单的函数,我不明白为什么它现在会给我这个错误。我一直在尝试解决可能给我带来问题的那条线,而我发现取消*length = cnt;
行显然没有给我问题。我是否可以避免出错?
谢谢
正确的代码:
int* flexibleArray(int *length) {
int *flexArray = NULL;
int cnt = 0, number = 0;
while (number!=-1) {
printf("\nInsert the variable :"); scanf("%d", &number);
if (number!=-1){
cnt++;
flexArray = realloc(flexArray, cnt * sizeof(int));
flexArray[cnt-1] = number;
}
}
*length = cnt;
return flexArray;
}
和main()
int *array = NULL, arrayLength;
array = flexibleArray(&arrayLength);
答案 0 :(得分:6)
作为初始化为null的指针,而arrayLength仅定义为 int且未初始化
在这种情况下,您需要将其引用传递给函数。
flexibleArray(&array, &arrayLength);
功能将变为
void flexibleArray(int **array, int *length) {
int cnt = 0, number = 0;
while (number!=-1) {
printf("\nInsert the variable :"); scanf("%d", &number);
if (number!=-1){
cnt++;
*array = realloc(*array, cnt * sizeof(int));
(*array)[cnt-1] = number;
}
}
*length = cnt;
}
或
从函数返回新指针。
int *flexibleArray(int *array, int *length)
{
....
return array;
}
来自main
array = flexibleArray(array, &arrayLength);