1

私はこれがエラーをスローすることに本当に困惑しています....

    char** results = new char*[numRes];  //this is where it breaks
    for(int i = 0; i < numRes; i++)  
    {  
         results[i] = new char[64];  
    }  

ヒープエラーの破損をスローしています。しかし、確かにそれはうまくいくはずですか?関数などに渡すことができるように、文字ポインターのリストに 4 char* を割り当てます。

私はいたるところを見回しましたが、それらはすべてmallocとfreeを示しているようです...クラスでそれらを使用しているので、c ++ newとdeleteに固執したいと思います。

誰か手を貸してくれませんか?

4

3 に答える 3

2

割り当てた後、何をしていますか?文字ポインタの配列のみを割り当て、各要素(ポインタ)にスペースを割り当てませんでした。要素にアイテムを保存しようとすると、問題が発生します。

たとえば、割り当て後にresults [0]に何かを保存する場合は、それに割り当てる必要があります。例えば:

results[0] = new char[100]; // NEED TO ALLOCATE BEFORE WRITING TO results[0]!
strcpy(results[0], "Test");

割り当てなしでresults[0]にコピーすることはできません。結果のどの要素にも同じことが当てはまります。

于 2012-12-11T19:44:13.537 に答える
1

ポインタ配列にメモリを割り当てています。その後、配列内のすべてのポインターにメモリを割り当てる必要があります。あなたのコードは次のようになるべきだと思います:

    int numRes = 4;
    char** results = new char*[numRes];

    for(int i=0; i<numRes; i++)
    {
         results[i] = new char;
    }
于 2012-12-11T19:51:35.750 に答える
0

C ++を使用している場合、STLを使用することは可能ですか?具体的には、コード内のstd :: string、およびstd::listまたはstd::vectorクラスですか?メモリ配列内の単なる文字シーケンスである従来のc文字列とは異なり、C ++文字列オブジェクトは、より直感的な方法で文字列を操作するための多くの組み込み機能と、C++コンテナに共通するいくつかの追加の便利な機能を備えたクラスに属します。

#include <string>
#include <list>

std::list<std::string> results; // create a list of strings

// and populate it
results.push_back("blah");
results.push_back("blah1");
results.push_back("blah2");
...
于 2012-12-11T20:36:00.383 に答える