以下是代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = malloc(sizeof(int));
int n;
printf("input number:\t");
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for(int i = 0; i < n; i++) {
printf("%d", arr[i]);
}
free(arr);
return 0;
}
它一直运行到scanf然后它就崩溃了:
1234875770417Aborted (core dumped)
我看过其他类似的帖子,但没有一个能解决我的问题。
答案 0 :(得分:0)
此声明中的初始化程序
int *arr = malloc(sizeof(int));
仅为int
类型的一个对象分配内存。因此,在这种情况下,n
可能不会大于1.
你应该写至少
int main( void ) {
int n;
printf("input number:\t");
scanf("%d", &n);
int *arr = malloc( n * sizeof(int));
//...
最好将变量n声明为类型unsigned int
而不是类型int
。
考虑到根据C标准,没有参数的函数main应声明为
int main( void )
这是一个更新的程序。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned int n = 0;
printf( "input a non-negative number:\t" );
scanf( "%u", &n );
int *arr = malloc( n * sizeof( int ) );
for ( unsigned int i = 0; i < n; i++ )
{
scanf( "%d", &arr[i] );
}
for ( unsigned int i = 0; i < n; i++ )
{
printf( "%d ", arr[i] );
}
putchar( '\n' );
free( arr );
return 0;
}
它的输出可能看起来像
input a non-negative number: 10
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
答案 1 :(得分:0)
由于您使用int *arr = malloc(sizeof(int));
仅为一个整数分配内存,并且您尝试将n
元素存储到该整数中,因此它会崩溃。
首先扫描n
值,然后使用n
为malloc()
元素分配内存。
int main() {
int n;
printf("input number:\t");
scanf("%d", &n);
int *arr = malloc(n*sizeof(*arr)); /*it's generic it allocated memory for any type */
if(arr == NULL) {
printf("memory allocation failed \n");
exit(0);
}
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for(int i = 0; i < n; i++) {
printf("%d", arr[i]);
}
free(arr);
return 0;
}