c中为数组分配内存时的分段错误

时间:2018-02-09 06:39:46

标签: c

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *ptr;
    int n,i=3;
    printf("Enter number of elements you want in array:");
    scanf("%d",&n);
    ptr=(int *)malloc(n*sizeof(n));
    if(ptr=NULL)
    {
        printf("Memory Not Allocated!!");
        return 0;
    }
    else
    {
        printf("Memory allocation succesful\n");
        int *arr;
        printf("write elements here\n");
        for(arr=ptr;arr<ptr+n;arr++)
        {
            scanf("%d",arr);
            printf("Hello world");
            printf("\n");
        }
        for(arr=ptr;arr<ptr+n;arr++)
        {
            printf("%d",*arr);
        }
        free(ptr);
    return 0;
    }
}

每当我运行此代码以便在输入时它停止工作。所以我稍后在一个在线编译器中检查过,它给出了Segmentation Fault。

请帮帮我!

1 个答案:

答案 0 :(得分:1)

这一行:

if(ptr=NULL)

应该是:

if(ptr==NULL)

否则,ptr的值为NULLptr=NULL的值为false。因此,在将ptr分配给NULL后立即运行 else子句

另一件事,为了提高for循环的可读性,这更具可读性:

   for(int i = 0; i < n; i++)
   {
       scanf("%d",&ptr[i]);

for语句是说loop n times的标准。使用&ptr[i](或ptr+i)可以更明显地引用哪个地址。