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
相关产品推荐
相关产品推荐

