首页 > 解决方案 > 在动态分配的数组中使用 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;
}

标签: cprintf

解决方案


要分配一个元素为 的数组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;
}

推荐阅读