c - 重新分配 size=3 的 char* 时使用 realloc-Problem 时出错
问题描述
我在做一个学校项目,在编写代码时,我收到了关于下一个尺寸无效的错误。我将在这里留下我主要代码中发生的事情的简短版本。当我到达 size=3 时的最终 realloc 时,程序似乎就中断了 谢谢
#include <stdlib.h>
int main(){
char * arga[7];
arga[1]="2018-11-12";
arga[2]="2018-11-13";
arga[3]="EUR";
arga[4]="BRL";
arga[5]="JPY";
arga[6]="GBP";
int argc=7;
int i=4;
int size=2;
//int indexes = (sizeof(arga)/sizeof(arga[0]))+1;
char**moedas=malloc(size*sizeof(char*));
moedas[0]=arga[3];
while(i<argc){
moedas[i-3]=arga[i];
moedas=realloc(moedas,size*sizeof(char*));
size++;
i++;
}
}
解决方案
您立即写出分配的内存:
int size=0;
char**moedas=malloc(size*sizeof(char*));
moedas[0]=arga[3];
因为索引 0 在 malloc(0) 之外
然后在第一个循环中,当i是 4 时
moedas[i-3]=arga[i]
因为索引 1 也在 malloc(0) 之外
编辑初始化大小为 1 后,第一个错误消失(索引 0 合法)但不是索引为 1 的第二个错误
推荐阅读
- azure - 是否可以在不知道总共有多少阶段的情况下在 Azure Pipelines 中运行“最后阶段”?
- c++ - 插值位置动画随距离变慢
- django - django模型中的自动外键
- python - Keras BatchNormalizing 不会产生预期的输出
- rabbitmq - 使用 masstransit 从错误/毒物队列中删除超过 90 天的消息
- android - 如何关闭来自 Play 商店的通知?
- android - 相同的包裹但不同的签名
- javascript - 反应日期选择器 | 单击图标时打开日历,但单击任意位置时关闭
- c++ - 是否可以使用异步组合器创建 boost::signal2?
- r - 将总计添加到 R Dataframe 中的最后一行