我有一个结构,以及它的构造方法.但是,我无法正确创建结构初始化.在参数中,我传递一个指向该结构类型的指针,以及它的所有实例变量(抱歉使用java术语,对C来说是新的).这是我的方法代码.
typedef struct anagramElement anagramElement;
struct anagramElement {
char* word;
char* key;
};
void createAnagramElement(char* const word, char* const key, anagramElement* rv)
{
rv = (anagramElement*) malloc(sizeof(anagramElement));
rv->word = word;
rv->key = key;
}
Run Code Online (Sandbox Code Playgroud)
在主要之后,传递anagramElement*ptr,char*Word,char*key,当打印元素数据时,会发生分段错误.注意:我无法更改参数或方法返回类型.
你正在经历rv价值.你做的任何事情都不会"超越"函数调用.为了避免双指针,重构因此createAnagramElement()返回指针.
anagramElement* createAnagramElement(char* const word, char* const key)
{
// don't cast the result of malloc()
anagramElement* rv = malloc(sizeof(anagramElement));
if (rv != NULL) {
// Just storing pointers to strings (not copies) so you need to be
// sure the strings don't go out of scope...
rv->word = word;
rv->key = key;
}
return rv;
}
Run Code Online (Sandbox Code Playgroud)
如果你不能改变参数(每条评论),也许createAnagramElement()应该初始化已经分配的anagramElement:
void createAnagramElement(char* const word, char* const key, anagramElement* rv)
{
// Don't change value of rv, just change values in the struct.
// rv = (anagramElement*) malloc(sizeof(anagramElement));
// Should also NULL check rv, but ignoring for now.
rv->word = word;
rv->key = key;
}
Run Code Online (Sandbox Code Playgroud)
你会称之为:
anagramElement instance;
createAnagramElement("hello", "world", &instance);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2975 次 |
| 最近记录: |