我刚刚开始用Visual Studio IDE在C中尝试指针。
我编写这个简单的程序是为了从用户那里获取10个数字,通过指针和模拟标准的1D数组将它们存储在内存中。
#include <stdio.h>
int *nums;
void main() {
printf("Enter 10 numbers");
for (int i = 0;i < 10;i++) {
scanf_s("%d", *(nums + i));
}
printf("Number are: ");
for (int i = 0;i < 10; i++) {
printf(" %d,", *(nums + i));
}
}
但是,我得到了这个错误:
在分配1D.exe:0xc000005中的0x00007FF698C7190C处引发异常:
访问冲突读取位置0x0000000000000000。
如有任何帮助,我们将不胜感激。
最佳答案
您必须在存储输入值的地方保留内存。
考虑到这个声明
scanf_s("%d", *(nums + i));
也是错误的。
scanf
的参数必须是指针。程序可以如下所示
#include <stdio.h>
#define N 10
int main( void )
{
int nums[N];
printf( "Enter %d numbers: ", N );
for ( int i = 0; i < N; i++)
{
scanf_s( "%d", nums + i );
}
printf( "Number are: " );
for ( int i = 0; i < N; i++ )
{
printf(" %d,", *( nums + i) );
}
}
另一种方法是动态分配数组。
例如
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main( void )
{
int *nums = malloc( N * sizeof( int ) );
printf( "Enter %d numbers: ", N );
for ( int i = 0; i < N; i++)
{
scanf_s( "%d", nums + i );
}
printf( "Number are: " );
for ( int i = 0; i < N; i++ )
{
printf(" %d,", *( nums + i) );
}
free( nums );
}
至于这个错误
Exception thrown at 0x00007FF698C7190C in Assignment 1D.exe: 0xC0000005:
Access violation reading location 0x0000000000000000
然后,由于没有分配内存,系统将具有静态存储持续时间的指针初始化为零。错误消息显示您正在尝试访问地址0(0x0000000000000000)处的内存
关于c - C的指针错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33524651/