Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将指针分配给另一个指针会崩溃_Objective C_C_Xcode_Pointers_Llvm - Fatal编程技术网

Objective c 将指针分配给另一个指针会崩溃

Objective c 将指针分配给另一个指针会崩溃,objective-c,c,xcode,pointers,llvm,Objective C,C,Xcode,Pointers,Llvm,我试图将指针y分配给指针x,*x=*y,但是如果testChar是指针,它就会崩溃 char *testChar = "abc"; char *x = testChar; char *y = testChar + 1; char temp; temp = *x; *x = *y; *y = temp; 如果我将代码更改为char testChar[]而不是*testChar,那么它工作得很好。有人能解释一下区别吗?字符串“abc”存储在只读存储器(程序的二进制文件)中。因此,您试图修改只读数据

我试图将指针y分配给指针x,*x=*y,但是如果testChar是指针,它就会崩溃

char *testChar = "abc";
char *x = testChar;
char *y = testChar + 1;
char temp;
temp = *x;
*x = *y;
*y = temp;
如果我将代码更改为char testChar[]而不是*testChar,那么它工作得很好。有人能解释一下区别吗?

字符串“abc”存储在只读存储器(程序的二进制文件)中。因此,您试图修改只读数据,这是不可能的

相反,您可以这样做:

char *testChar = strdup("abc"); // allocate new (writable) memory and copy this const string there.
char *x = testChar;
char *y = testChar + 1;
char temp;
temp = *x;
*x = *y;
*y = temp;
请注意,
testChar
指向您不再需要时负责释放的内存(与
malloc
相同)。

字符串“abc”存储在只读内存(程序的二进制文件)中。因此,您试图修改只读数据,这是不可能的

相反,您可以这样做:

char *testChar = strdup("abc"); // allocate new (writable) memory and copy this const string there.
char *x = testChar;
char *y = testChar + 1;
char temp;
temp = *x;
*x = *y;
*y = temp;

请注意,
testChar
指向您在不再需要时负责释放的内存(与
malloc
相同)。

*x=*y?o、 另外,SO中对此进行了广泛讨论。您的
testChar
应该是
const
,因为它指向一个只读对象字符串文本。但是,在中,您可以使用
const
来防止意外修改您不想修改的内容,但最终您有责任阻止它;char*x=testChar;char*y=testChar+1;焦炭温度;温度=*x*x=*y*y=温度;这个程序有助于交换。我在极客中的极客中找到了它。我还没有玩过c中的字符数组。听不懂it@Sujananth你自己找到了解决办法。您需要什么?无法理解为什么它会崩溃
*x=*y?o、 另外,SO中对此进行了广泛讨论。您的
testChar
应该是
const
,因为它指向一个只读对象字符串文本。但是,在中,您可以使用
const
来防止意外修改您不想修改的内容,但最终您有责任阻止它;char*x=testChar;char*y=testChar+1;焦炭温度;温度=*x*x=*y*y=温度;这个程序有助于交换。我在极客中的极客中找到了它。我还没有玩过c中的字符数组。听不懂it@Sujananth你自己找到了解决办法。您在这里需要什么?无法理解为什么会崩溃。我假设应该手动释放由
strdup
返回的内存?我会将它添加到代码中。@freeinkname true。我已经更新了答案。另外,不要假设
strdup()
返回了有效的指针。检查实代码中的
NULL
。也不要假设strdup存在,因为它不是标准的。首先,这里没有明显的理由使用堆分配。另外,不要回答这个非常常见的常见问题,但请重复回答。您必须使用printf(“%c”)而不是%s打印。%s在下一个\0字符处停止*x和*y仅存储一个字符。y指向第二个字符,x指向第一个字符。这一点没有改变。我假设strdup返回的内存应该手动释放?我会将它添加到代码中。@freeinkname true。我已经更新了答案。另外,不要假设
strdup()
返回了有效的指针。检查实代码中的
NULL
。也不要假设strdup存在,因为它不是标准的。首先,这里没有明显的理由使用堆分配。另外,不要回答这个非常常见的常见问题,但请重复回答。您必须使用printf(“%c”)而不是%s打印。%s在下一个\0字符处停止*x和*y仅存储一个字符。y指向第二个字符,x指向第一个字符。这一点没有改变。