所以我认为这个问题的解决方案相当简单,但我必须遗漏一些东西。我想要做的就是将一个数组传递给一个函数,然后在函数中设置数组元素值,然后在全局范围内使用。
int setArray(char* myArray) {
char localArray[9] = "abcdefghi";
for (int i = 0; i < 10; i++){
myArray[i] = localArray[i];
printf("myArray: %c\n", myArray[i]);
}
return(0);
};
int main(int argc, char* argv[])
{
char* globalArray = NULL;
setArray(globalArray);
printf("globalArray: %s\n", globalArray);
return(0);
};
上面的代码崩溃了。有一次,我让它工作,我可以在函数中设置globalArray并打印出它的值但是当我打印出main()中的值时,它是null。
我认为问题在于没有正确设置指针并传递它,但我不确定
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
崩溃是因为你没有为globalArray
分配内存。
只需添加以下内容:
globalArray = malloc(10);
在setArray()
调用之前。
此外,正如已经提到的那样,您的复制功能不正确,因为您在复制时忘记了空终止符。
答案 1 :(得分:1)
指针checkbox_value
没有指向有效的内存位置。您需要使用globalArray
,globalArray
等分配内存并在malloc
中存储该地址。
您可以在calloc
或main()
函数中分配内存,因为动态内存分配使用的堆即使在setArray()
退出后也可以访问所有函数。
所以正确的代码可能是:
setArray
此外,您尚未在功能char* globalArray = malloc(10 * sizeof(char));
if(!globalArray)
{
printf("Memory could not be allocated!\n");
exit(1);
}
setArray(globalArray);
...
中将\0
字节复制到myArray
setArray()
循环后,您需要for
您的代码中也有myArray[i] = '\0';
。
此处char localArray[9] = "abcdefghi";
不是有效的c字符串,因为它不包含终止localArray
字符。虽然它暂时没有解决任何问题,但如果您碰巧打印/更改'\0'
字符串,那么它将导致无效的内存访问(localArray
)
所以要避免使用
SegFault
而不是
`char localArray[] = "abcdefghi";`
答案 2 :(得分:0)
您需要为globalArray
分配内存以指向,或者您需要将其声明为数组而不是指针:
char *globalArray = malloc( SOME_SIZE );
if ( globalArray )
{
setArray( globalArray );
...
}
free( globalArray );
或
char globalArray[SOME_SIZE];
setArray( globalArray );
其中SOME_SIZE
足够大,至少可以保存localArray
函数中setArray
的内容加上一个尾随字符串终止符(0值字节)。
修改强>
您的代码崩溃的原因是您为NULL
参数传递myArray
值,该参数是无效指针值。尝试取消引用无效指针值(在这种情况下,通过使用[]
下标运算符)会导致未定义的行为;在您的情况下,它会导致您的代码崩溃。