C 指向结构中字符的指针,分段错误

C 指向结构中字符的指针,分段错误,c,char,C,Char,所以我创建了一个结构,其中一个变量是指向动态字符数组的指针。所以我把它实现为指向指针的指针。然后我使用一个单独的函数来初始化结构: #include<stdio.h> #include<stdlib.h> //create a struct typedef struct{ //use a double pointer char **dynamicArray; int size; int topValue; }Stack; /*

所以我创建了一个结构,其中一个变量是指向动态字符数组的指针。所以我把它实现为指向指针的指针。然后我使用一个单独的函数来初始化结构:

#include<stdio.h>
#include<stdlib.h>
//create a struct
typedef struct{
    //use a double pointer
    char **dynamicArray; 
    int size;
    int topValue; 
}Stack; 

/*
    Inintializes the stack
    Dyanmic Array will have a size of 2
*/
void intializeStack(Stack *stack){
    stack->size = 2; 
    stack->topValue = 0;

    //create a dyanmic array of char and set the value in the struct to the address for the newly created array
    char *dyanmic; 
    dyanmic = malloc(2 * sizeof(char)); 
    stack->dynamicArray = &dyanmic; 
}
int main(){

    Stack stack; 
    intializeStack(&stack);

    printf("stack.size: %d\n", stack.size);
    printf("stack.topValue: %d\n", stack.topValue); 
    int i; 
    for (i = 0; i < stack.size; i++){
        *(stack.dynamicArray)[i] = 'r'; 
        printf("%d value of the dynamic array: %c\n", i, *(stack.dynamicArray)[i]);
    }

    printf("Check if the stack is empty: %s\n",isEmpty(&stack)?"true":"false");

    return 0; 
}

我在实现过程中是否做错了什么?

以下结构令人困惑,最终是不正确的:

for (i = 0; i < stack.size; i++){
      *(stack.dynamicArray)[i] = 'r'; 
      printf("%d value of the dynamic array: %c\n", i, *(stack.dynamicArray)[i]);
}
for(i=0;i
实际上,您正通过此构造引用**的第一级。请尝试以下方法:

for (i = 0; i < stack.size; i++){
    stack.dynamicArray[0][i] = 'r';
    printf("%d value of the dynamic array: %c\n", i, stack.dynamicArray[0][i]);
}
for(i=0;i
从这个意义上抽象F:)


在对象生命周期结束后使用对象地址的未定义行为。为什么指针指向指针?从我所能看到的一切来看,你想要单一的间接;不是双精度。@WhozCraig,因为我必须动态更改它的大小,这样我可以创建一个大于该值的临时数组,然后设置指向该值的指针。@VineetPatel你可以使用
char*
什么的内存来做?您保留的是一个局部自动变量的地址,该变量在函数返回后立即消失。
&dyanmic
dyanmic
之间有很大的区别。
for (i = 0; i < stack.size; i++){
    stack.dynamicArray[0][i] = 'r';
    printf("%d value of the dynamic array: %c\n", i, stack.dynamicArray[0][i]);
}
char **dyanmic; 
dyanmic = malloc(sizeof(char *));
*dyanmic = malloc(2 * sizeof(char)); 
stack->dynamicArray = dyanmic;