c - 动态内存分配中的分段错误(核心转储)错误
问题描述
我是编码新手,也是 C++ 新手。我正在尝试编写一个输入矩阵元素的代码。之后,应删除一列,并添加一行。删除一列工作正常。但是,在为新的行数重新分配内存后,我收到消息:分段错误(核心转储)。我正在使用指针来创建和编辑我的矩阵。这是我的代码。谢谢你的帮助!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c,r,**p,column,row;
printf("Enter the number of rows and columns:\n");
scanf("%d\n%d",&r,&c);
p=(int**)calloc(r,sizeof(int*));
if(p==NULL) printf("Memory not allocated.\n");
else{
for(int i=0;i<r;i++){
*(p+i)=(int*)calloc(c,sizeof(int));
printf("Enter %d. row\n",i+1);
for(int j=0;j<c;j++){
scanf("%d",*(p+i)+j);
}
}
printf("Original matrix:\n");
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
printf("%d ",*(*(p+i)+j));
}
printf("\n");
}
printf("Which column do you want to remove?");
scanf("%d",&column);
while(column<1||column>c){
printf("Wrong entry, enter again:");
scanf("%d",&column);
}
for(int i=0;i<=r-1;i++){
for(int j=column-1;j<=c-2;j++)
*(*(p+i)+j)=*(*(p+i)+j+1);
*(p+i)=(int*)realloc(*(p+i),(c-1)*sizeof(int));
}
printf("Matrix without %d. column:\n",column);
for(int i=0;i<r;i++){
for(int j=0;j<c-1;j++)
printf("%d ",*(*(p+i)+j));
printf("\n");
}
printf("Which row do you want to replace?\n");
scanf("%d",&row);
while(row<1||row>r){
printf("Wrong entry, enter again:\n");
scanf("%d",&row);
}
p=(int**)realloc(p,(r+1)*sizeof(int*));
if(p==NULL)
printf("Memory not allocated.\n");
else{
printf("Enter %d. row",row);
for(int i=r+1;i>row-1;i++){
*(p+i)=*(p+i-1);
}
for(int j=0;j<c-2;j++)
scanf("%d",*(p+row-1)+j);
printf("New matrix:\n");
for(int i=0;i<=r;i++){
for(int j=0;j<c-2;j++)
printf("%d ",*(*(p+i)+j));
printf("\n");
}
}
}
return 0;
}
解决方案
当您为 重新分配内存时p
,您会向该数组添加一个新行(一个额外的指针)。但是你永远不会为那个新行分配内存,最终你会访问这个未初始化的指针。
但这不是真正的问题。在您想要将指针向上移动以为插入的行腾出空间的循环中,您的初始值和循环增量都是错误的。初始值为 时int i=r+1
,第一次写入*(p+i)
将访问分配空间之后的一个(将是p[0]
thru p[r]
)。循环增量应该是减量,--i
. 完成此循环后,您可以为新行分配空间。
推荐阅读
- python - Python:平滑曲线看起来与原始数据相同?
- javascript - Here Maps - 防止地图在地图外显示灰色区域
- python - 无法使用 Matplotlib 连续绘制序列值
- powerbi - 无法使用 Power BI 中的 OData 源连接到 SharePoint 以获取数据
- backup - 闹鬼的 ArangoDB 企业集群
- html - 删除 HTML 文档中的边框间隙
- entity-framework - 使用 Entity Framework Core Table Per Hierarchy Inheritance 时列名无效
- python - 有谁知道这个错误代码是什么意思?我的程序昨天运行良好。“SSL:CERTIFICATE_VERIFY_FAILED”
- python - 如何在linux上安装python3时解决问题
- python - 需要从 python 变量中读取的 Kivy 标签文本