代码如下:
#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)
我看过其他类似的帖子,但没有一个能解决我的问题。
最佳答案
此声明中的初始化程序
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
关于c - 错误 : free(): invalid next size (fast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49708766/