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;