You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++动态内存分配示例代码运行报错:malloc调用表达式类型错误

报错原因

p=(int*) malloc (p*sizeof(int)); 行报错的核心原因是:你定义的p是未初始化的int类型指针,不能直接作为算术运算的参数传入malloc计算申请内存的大小,编译器无法识别指针类型参与算术运算的逻辑,因此抛出expression must have arithmetic or unscoped enum type错误。

其他代码问题

除当前报错外,代码还存在多处动态内存函数使用错误:

  • 注释的calloc调用参数错误:calloc第一个参数为元素个数,第二个为单个元素的字节大小,不能传入未初始化的指针p
  • realloc调用参数错误:当前仅申请了1个int大小的内存,不符合你输入n1作为新元素个数的需求,后续访问会触发内存越界
  • 输出无分隔符,无法区分不同元素,不便于调试验证结果

修复后完整代码

#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
  int n,i,*p,n1;
  cout<<"Enter total elements: ";
  cin>>n;
  // 修复malloc参数,用输入的元素个数n计算总申请大小
  p=(int*) malloc (n * sizeof(int));
  if(p==NULL)
  {
    cout<<"Memory allocation failed\n";
    exit(1);
  }
  cout<<"===== Malloc allocated memory =====\n";
  for(i=0;i<n;i++)
  {
    cout<<"Enter element "<<i+1<<": ";
    cin >> *(p+i);
  }
  cout<<"Entered elements: ";
  for(i=0;i<n;i++)
  {
    cout<<*(p+i)<<" ";
  }
  cout<<"\n\nEnter new size: ";
  cin>>n1;
  // 修复realloc参数,按新元素个数n1计算总申请大小
  p=(int*)realloc(p, n1 * sizeof(int));
  if(p==NULL)
  {
    cout<<"Memory allocation failed\n";
    exit(1);
  }
  cout<<"===== Realloc expanded memory =====\n";
  for(i=n;i<n1;i++)
  {
    cout<<"Enter new element "<<i+1<<": ";
    cin >>*(p+i);
  }
  cout<<"All elements after expansion: ";
  for(i=0;i<n1;i++)
  {
    cout<<*(p+i)<<" ";
  }
  // 可选:补充calloc演示逻辑,calloc申请的内存会自动初始化为0
  int *p_calloc = (int*)calloc(3, sizeof(int));
  cout<<"\n\n===== Calloc allocated memory (default initialized to 0) =====\n";
  for(int j=0;j<3;j++){
    cout<<p_calloc[j]<<" ";
  }
  free(p);
  free(p_calloc);
  return 0;
}

内容的提问来源于stack exchange,提问作者Somansh Bhayani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:45:07