Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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标准库来看看我是否记得很好。原来我没有。。 然而,我在堆上分配了一些字符串,当我试图删除它们时,我会遇到访问冲突和崩溃 #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); }_C++ - Fatal编程技术网

为什么我的代码在免费呼叫时崩溃? 我试图用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); }

为什么我的代码在免费呼叫时崩溃? 我试图用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); },c++,C++,这是正确的。我唯一的问题是释放我的分配。因为某种原因,它不会让我 我做错了什么?循环 while(strs != NULL) delete[] strs[j++]; 这是行不通的delete不会影响strs的值(实际上,您不希望这样),因此您会一次又一次地删除相同的字符串 循环 while(strs != NULL) delete[] strs[j++]; 这是行不通的delete不会影响strs的值(实际上,您不希望这样),因此您会一次又一次地删除相同的字符串 循环

这是正确的。我唯一的问题是释放我的分配。因为某种原因,它不会让我

我做错了什么?

循环

 while(strs != NULL)
    delete[] strs[j++];
这是行不通的
delete
不会影响strs的值(实际上,您不希望这样),因此您会一次又一次地删除相同的字符串

循环

 while(strs != NULL)
    delete[] strs[j++];
这是行不通的
delete
不会影响strs的值(实际上,您不希望这样),因此您会一次又一次地删除相同的字符串

循环

 while(strs != NULL)
    delete[] strs[j++];
这是行不通的
delete
不会影响strs的值(实际上,您不希望这样),因此您会一次又一次地删除相同的字符串

循环

 while(strs != NULL)
    delete[] strs[j++];


这是行不通的
delete
不会影响strs的值(实际上,您不希望这样),因此您会一次又一次地删除相同的字符串

我正试图用C++编写一些C
这是什么意思?你是说你故意写C,然后编译成C++,使它完全不习惯?为什么?新建和删除不是C的一部分。如果您试图编写CSTR,请使用malloc和free!=空值始终为真,你的周期在此持续很久。我使用了
free
malloc
。strs[len+1]指向未分配区域
我正在尝试用C++编写一些C
这意味着什么?你是说你故意写C,然后编译成C++,使它完全不习惯?为什么?新建和删除不是C的一部分。如果您试图编写CSTR,请使用malloc和free!=空值始终为真,你的周期在此持续很久。我使用了
free
malloc
。strs[len+1]指向未分配区域
我正在尝试用C++编写一些C
这意味着什么?你是说你故意写C,然后编译成C++,使它完全不习惯?为什么?新建和删除不是C的一部分。如果您试图编写CSTR,请使用malloc和free!=空值始终为真,你的周期在此持续很久。我使用了
free
malloc
。strs[len+1]指向未分配区域
我正在尝试用C++编写一些C
这意味着什么?你是说你故意写C,然后编译成C++,使它完全不习惯?为什么?新建和删除不是C的一部分。如果您试图编写CSTR,请使用malloc和free!=空值始终为真,你的周期在此持续很久。我使用了
free
malloc
。strs[len+1]指向未分配区域我认为delete[]是可以的,但这实际上是一个永无止境的循环,但delete[]最终作用于数组外部的指针segfault@marcin_j:没错。我认为delete[]是可以的,但这实际上是一个永无止境的循环,但最后delete[]对数组外部的指针起作用segfault@marcin_j:没错。我认为delete[]是可以的,但这实际上是一个永无止境的循环,但最后delete[]对数组外部的指针起作用segfault@marcin_j:没错。我认为delete[]是可以的,但这实际上是一个永无止境的循环,但最后delete[]对数组外部的指针起作用segfault@marcin_j:没错。一旦j大于数组,它就会崩溃。