[英]Malloc and Assignment inside another function
我需要帮助来理解为什么这不起作用。
我正在尝试通过另一个函数进行malloc
和分配指令和分隔符。 通过我尝试过的一切,我在第二个分配*separators[1] = '1'
上遇到了分段错误,但由于某种原因, *separators = '2'
有效。
我认为引用指针有一些我不明白的地方。
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
void split_instructions(char ***instructions, char **separators)
{
int split_len = 2;
*instructions = (char **)malloc(sizeof(char*) * split_len + 1);
if (*instructions == NULL)
return;
*separators = (char *)malloc(sizeof(char) * split_len + 1);
if (*separators == NULL)
{
free(instructions);
return;
}
*separators[0] = (char)'q';
*separators[1] = (char)'1';
//*separators = "22"; <- this work
*instructions[0] = (char*)"test";
*instructions[1] = (char*)"test2";
}
int main(void)
{
char **instructions;
char *separators;
split_instructions(&instructions, &separators);
}
表达式如
*separators[1] = (char)'1';
由于operator precedence无法正常工作。
[]
运算符的优先级高于*
运算符,因此它会尝试写入separators
的第二个元素,而它所指向的“数组”只有一个元素。
应该这样写
(*separators)[1] = (char)'1';
还要注意分配大小在
*instructions = (char **)malloc(sizeof(char*) * split_len + 1);
看起来很奇怪。 + 1
只会增加一个字节的分配大小,而不是一个元素的大小。 如果你应该为另一个元素分配,它应该是
*instructions = malloc(sizeof(char*) * (split_len + 1));
要么
*instructions = malloc(sizeof(**instructions) * (split_len + 1));
请注意, malloc()
系列的转换结果被认为是一种不好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.