Jac*_*b G 0 c for-loop pass-by-reference operator-precedence dynamic-memory-allocation
我正在做一个练习,创建一个数组并用整数填充元素。我首先将数组的长度输入到 malloc 中作为大小。然后,我在 for 循环中扫描数组中每个点的元素。
这是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int scaning(int ** array){
int size;
scanf("%d", &size);
*array = malloc(sizeof(int)*size);
//printf("%d\n", size);
for (int i=0; i<=size; i++){
int num;
scanf("%d", &num);
*array[i] = num;
}
return size;
}
int main(){
int * array;
int zero;
zero = scaning(&array);
//printf("%d\n", zero);
printf("LOOPS\n");
for (int i=0; i<= zero; i++){
printf("%d\n", array[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我输入元素填充数组两次后,出现段错误。我通常输入 5 个数组的大小,输入 2 个数字,然后它就会崩溃。不知道我哪里出错了。有任何想法吗?
程序中的 for 循环如下所示
for (int i=0; i<=size; i++){
Run Code Online (Sandbox Code Playgroud)
具有无效条件i <= size。索引的有效范围是[0, size)。
您需要使用条件i < size。
另一个问题与运算符优先级有关。
代替
*array[i] = num;
Run Code Online (Sandbox Code Playgroud)
这相当于
*( array[i] ) = num;
Run Code Online (Sandbox Code Playgroud)
你需要写
( *array )[i] = num;
Run Code Online (Sandbox Code Playgroud)
或者至少
array[0][i] = num;
Run Code Online (Sandbox Code Playgroud)
该函数可以通过以下方式定义
size_t scaning( int **array )
{
*array = NULL;
size_t size = 0;
scanf( "%zu", &size );
if ( size != 0 ) *array = malloc( sizeof( int ) * size );
if ( *array != NULL )
{
for ( size_t i = 0; i < size; i++ )
{
int num = 0;
scanf( "%d", &num );
( *array )[i] = num;
}
}
else
{
size = 0;
}
return size;
}
Run Code Online (Sandbox Code Playgroud)
相应地,变量zero(为什么命名为“零”?)也必须具有类型size_t。
请注意,您应该释放 main 中分配的数组,例如
free( array );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |