c - 在动态分配的数组中使用 sprintf 时出现分段错误
问题描述
我正在将整数转换为字符串并将它们添加到动态分配的数组中。问题是它导致了段错误。我不明白为什么会这样。
#include <stdio.h>
#include <stdlib.h>
int main() {
char *x = malloc(10 * sizeof(char));
x[0] = malloc(10 * sizeof(char));
sprintf(x[0],"%d",10);
for(int i = 0; i < 10;i++){
free(x[i]);
}
free(x);
return 0;
}
解决方案
要分配一个元素为 的数组char*
,指向该数组的指针应该是char**
,而不是char*
。
此外,您不得在通过分配malloc()
且未初始化的缓冲区中使用值。这些值是不确定的,使用它们会调用未定义的行为。
#include <stdio.h>
#include <stdlib.h>
int main() {
/* correct type here (both variable and allocation size) */
char **x = malloc(10 * sizeof(char*));
x[0] = malloc(10 * sizeof(char));
sprintf(x[0],"%d",10);
/* initialize the other elements to pass to free() */
for (int i = 1; i < 10; i++) x[i] = NULL;
for(int i = 0; i < 10;i++){
free(x[i]);
}
free(x);
return 0;
}
推荐阅读
- reactjs - 即使 props 未更改,我如何知道是否在 redux 中调用了调度?
- javascript - 如何为特定步骤禁用或隐藏 intro.js 中的按钮?
- laravel - 方法 Illuminate\Database\Eloquent\Collection::appends 不存在。我使用了 kyslik/column-sortable 包,排序和分页不起作用
- git - 在没有凭据的情况下克隆私人 github 存储库?
- kubernetes - 在 GKE 中创建的节点数不正确
- sql - 在 wp_postmeta 表中存储一些数值并使用 sql 查询获取它是一种好习惯吗?(WordPress,数据库)
- pytorch - 在pytorch中合并两个张量
- r - 我不能在 else 中使用很多 ifelse 吗?
- python - Django中不同角色的权限
- html - 在 hi dpr 屏幕上使用 srcset 时,图像显示大小减半