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
。