Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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
C 释放字符指针数组(字符串文本)?_C_Arrays_Pointers_Memory - Fatal编程技术网

C 释放字符指针数组(字符串文本)?

C 释放字符指针数组(字符串文本)?,c,arrays,pointers,memory,C,Arrays,Pointers,Memory,我试图找出如何为字符指针数组(字符串文本)释放内存,但我不能完全理解语法。这就是我声明和初始化数组的方式 char * words[] = { "THESE", "ARE", "SOME", "WORDS" }; 我试过这么做 free(words); 而这个 for(i = 0; i < 4; i++) { free(words[i]); } (i=0;i

我试图找出如何为字符指针数组(字符串文本)释放内存,但我不能完全理解语法。这就是我声明和初始化数组的方式

char * words[] = { "THESE", "ARE", "SOME", "WORDS" };
我试过这么做

free(words);
而这个

for(i = 0; i < 4; i++) {
    free(words[i]);
}
(i=0;i<4;i++)的
{
自由(字[i]);
}
但是第一个会导致glibc出现某种无效指针错误,第二个会导致分段错误


那么释放内存的正确方法是什么呢?

如果您没有分配内存(例如
malloc
calloc
),那么您也不应该释放内存(例如
free


如果您需要释放从函数返回的指针,文档通常会非常清晰和明确,例如,就是这种情况。

如果您没有分配它(例如
malloc
calloc
),那么您也不应该释放它(例如
free


如果您需要释放从函数返回的指针,文档通常会非常清晰和明确,例如,就是这种情况。

如果您没有分配它(例如
malloc
calloc
),那么您也不应该释放它(例如
free


如果您需要释放从函数返回的指针,文档通常会非常清晰和明确,例如,就是这种情况。

如果您没有分配它(例如
malloc
calloc
),那么您也不应该释放它(例如
free



如果需要释放函数返回的指针,文档通常会非常清晰和明确,例如,在这种情况下。

这是一个静态初始化的数组。无论如何,你不应该释放它。不要
释放你没有
malloc
的东西“什么是正确的方法”?什么也不做。它是自动释放的。这是一个静态初始化的数组。无论如何,你不应该释放它。不要
释放你没有
malloc
的东西“什么是正确的方法”?什么也不做。它是自动释放的。这是一个静态初始化的数组。无论如何,你不应该释放它。不要
释放你没有
malloc
的东西“什么是正确的方法”?什么也不做。它是自动释放的。这是一个静态初始化的数组。无论如何,你不应该释放它。不要
释放你没有
malloc
的东西“什么是正确的方法”?什么也不做。它是自动释放的。啊,好吧。我问这个问题是因为我的程序中有一些内存泄漏,看起来这些数组的元素数量是罪魁祸首。我想我可以从我的向量库和字符串库中获得更多的乐趣……试着用valgrind调试。@DarinBeaudreau:不要通过随机猜测来编程。学习并遵循语言规则。这在标准C中是正确的。在POSIX和编译器扩展中,有时您会发现返回内存的函数必须
free()
,尽管您没有对其进行malloc。例如,
strdup
getline
。啊,好的。我问这个问题是因为我的程序中有一些内存泄漏,看起来这些数组的元素数量是罪魁祸首。我想我可以从我的向量库和字符串库中获得更多的乐趣……试着用valgrind调试。@DarinBeaudreau:不要通过随机猜测来编程。学习并遵循语言规则。这在标准C中是正确的。在POSIX和编译器扩展中,有时您会发现返回内存的函数必须
free()
,尽管您没有对其进行malloc。例如,
strdup
getline
。啊,好的。我问这个问题是因为我的程序中有一些内存泄漏,看起来这些数组的元素数量是罪魁祸首。我想我可以从我的向量库和字符串库中获得更多的乐趣……试着用valgrind调试。@DarinBeaudreau:不要通过随机猜测来编程。学习并遵循语言规则。这在标准C中是正确的。在POSIX和编译器扩展中,有时您会发现返回内存的函数必须
free()
,尽管您没有对其进行malloc。例如,
strdup
getline
。啊,好的。我问这个问题是因为我的程序中有一些内存泄漏,看起来这些数组的元素数量是罪魁祸首。我想我可以从我的向量库和字符串库中获得更多的乐趣……试着用valgrind调试。@DarinBeaudreau:不要通过随机猜测来编程。学习并遵循语言规则。这在标准C中是正确的。在POSIX和编译器扩展中,有时您会发现返回内存的函数必须
free()
,尽管您没有对其进行malloc。例如,
strdup
getline