为什么我的代码在调用 free 时崩溃
Why does my code crash when calling free?
我正在尝试使用C++中的C标准库,只是为了看看我是否记得很清楚。原来我没有。. 但是,我在堆上分配了一些字符串,当我尝试删除它们时,我遇到了访问冲突和崩溃。
#include <climits>
#include <cstring>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
void substr(char* str, std::size_t offset, std::size_t pos, char* buffer)
{
for (unsigned i = offset, j = 0; i < pos; ++i, ++j)
buffer[j] = str[i];
}
void substr(char* str, std::size_t pos, char* buffer)
{
substr(str, pos, strlen(str), buffer);
}
int countstr(char* StringToSplit, char* Delimiter)
{
int count = 0;
char* ptr = strstr(StringToSplit, Delimiter);
while(ptr != NULL)
{
++count;
ptr = strstr(ptr + 1, Delimiter);
}
return count;
}
void SplitString(char* StringToSplit, char* Delimiter, char** Result)
{
int i = 0;
char* ptr = strtok(StringToSplit, Delimiter);
while(ptr != NULL)
{
Result[i] = (char*)malloc(strlen(ptr) + 1);
strcpy(Result[i], ptr);
ptr = strtok(NULL, Delimiter);
++i;
}
}
int main()
{
char str[] = "Hello there nooby noob";
int len = countstr(str, " ");
char** strs = (char**)malloc(len * sizeof(char*));
SplitString(str, " ", strs);
for (int i = 0; i < len + 1; ++i)
{
printf("%s, ", strs[i]);
}
for (int i = 0; i < len + 1; ++i)
{
free(strs[i]);
}
free(strs);
}
它打印:
"Hello, there, nooby, noob".
这是正确的。我唯一的问题是释放我的分配。出于某种原因,它不会让我。
我做错了什么?
循环
while(strs != NULL)
delete[] strs[j++];
行不通。 delete
不会影响 strs 的值(实际上您不希望这样),因此您一遍又一遍地删除相同的字符串。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 调用 free() 有时会导致程序崩溃
- 在C++中调用 free() 会触发 ntdll!DbgBreakPoint() 在调试中,但在发布中崩溃
- Malloc()/free()在Windows上的几个线程中崩溃
- C++ 在 free() 上崩溃
- 由于多个线程中的 free() 调用,程序随机崩溃
- 调用free()时会发生混合语言程序崩溃
- 为什么我的代码在调用 free 时崩溃
- 与"glibc detected: vector double free or corruption (out)"崩溃
- C++代码崩溃并显示"free(): invalid next size"
- c++服务器在free()上使用_UTF8_init()中的abort()而崩溃