【问题标题】:Unable to allocate dynamic memory segmentation error无法分配动态内存分段错误
【发布时间】:2020-01-14 20:05:31
【问题描述】:

我正在尝试使用函数为数组分配内存。 我通过引用传递了指针(使用双指针)。代码编译但在运行时抛出分段错误。

#include<stdio.h>
#include<stdlib.h>
//funct to read array 

int read(int **v){
    int n,ele;
    printf("enter number of elements \n");
    scanf("%d",&n);
    //p=(int*)malloc(n*(sizeof(int));
        *v= (int*)malloc(n * sizeof(int)); 
    for(int i=0;i<n;i++)
    {
        //printf("enter %d th element \n",i);
        scanf("%d",&ele);
        *v[i]=ele;
    }
    return n;
}


void main()
{
    int *p=NULL;
    int sz=read(&p);
    for(int i =0;i<5;i++)
    {
        printf("%d",p[i]);
    }
}

【问题讨论】:

  • 您没有检查来自scanf() 的返回值,所以您不知道它是否有效。您没有检查malloc() 是否返回NULL,因为您可能已经传递了垃圾输入。
  • 发表您的意见。

标签: c arrays pointers dynamic malloc


【解决方案1】:

这是错误:*v[i]=ele;。在这种情况下,您首先为数组下标,然后取消引用它。 https://en.cppreference.com/w/c/language/operator_precedence。将其更改为 (*v)[i]=ele; 即可。

UPD。不要忘记free(p)以避免内存泄漏。

【讨论】:

  • 这不是 C++。
  • @JL2210 我附上了 c 运算符优先级的链接,而不是 c++,但 c++ 的答案将保持不变
  • 我知道。你提到了operator[]
猜你喜欢
  • 2021-08-23
  • 1970-01-01
  • 2021-11-28
  • 2020-07-17
  • 2016-09-29
  • 2014-04-28
  • 2013-09-16
相关资源
最近更新 更多