c - 简单函数的分段错误
问题描述
调用此函数时,我不断收到分段错误 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);
解决方案
作为初始化为 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);
推荐阅读
- python - 使用 pandas groupby 计算列
- javascript - Fabric js 变换和缩放画布以适应视口中的所有对象
- python - (discord.py) 如何获取用户拥有多少权限的列表
- python - 我试图让我的蛇在不使用 wasd 或箭头键的情况下自动移动
- python - 如何从python中的列表中删除所有字母项目
- reactjs - 你如何格式化 Victory Charts VictoryAxis 的 tickLabel 颜色?
- database - 为什么 MongoDB 将 _ids 创建为对象?
- c++11 - 简单的 Arduino PlatformIO C++11 项目在链接阶段未定义对默认构造函数的引用(但智能感知未检测到错误)
- apache-spark - Spark 3.0.0 停止支持多个上下文
- powershell - 用于检测 Hyper-V Gen 2 VM 与 Gen 1 VM 的 PowerShell 代码(从 VM 本身运行)