@@ -26,23 +26,23 @@ public:
2626 String () : length(0 ), data(0 ) {}
2727
2828 // Constructor for C-string initializer
29- String (const char *s) {
29+ String (const char *s) : length( 0 ), data( 0 ) {
3030 _realloc (strlen (s));
31- memcpy (data, s, length );
31+ strcpy (data, s);
3232 }
3333
3434 // Copy constructor
35- String (const String& s) {
35+ String (const String& s) : length( 0 ), data( 0 ) {
3636 _realloc (s.length );
37- memcpy (data, s.data , length );
37+ strcpy (data, s.data );
3838 }
3939
4040 ~String () { cudaFree (data); }
4141
4242 // Assignment operator
4343 String& operator =(const char * s) {
4444 _realloc (strlen (s));
45- memcpy (data, s, length );
45+ strcpy (data, s);
4646 return *this ;
4747 }
4848
@@ -71,23 +71,23 @@ struct DataElement : public Managed
7171
7272__global__
7373void Kernel_by_pointer (DataElement *elem) {
74- printf (" On device: name=%s, value=%d\n " , elem->name .c_str (), elem->value );
74+ printf (" On device by pointer: name=%s, value=%d\n " , elem->name .c_str (), elem->value );
7575
7676 elem->name [0 ] = ' p' ;
7777 elem->value ++;
7878}
7979
8080__global__
8181void Kernel_by_ref (DataElement &elem) {
82- printf (" On device: name=%s, value=%d\n " , elem.name .c_str (), elem.value );
82+ printf (" On device by ref: name=%s, value=%d\n " , elem.name .c_str (), elem.value );
8383
8484 elem.name [0 ] = ' r' ;
8585 elem.value ++;
8686}
8787
8888__global__
8989void Kernel_by_value (DataElement elem) {
90- printf (" On device: name=%s, value=%d\n " , elem.name .c_str (), elem.value );
90+ printf (" On device by value: name=%s, value=%d\n " , elem.name .c_str (), elem.value );
9191
9292 elem.name [0 ] = ' v' ;
9393 elem.value ++;
@@ -127,7 +127,7 @@ int main(void)
127127
128128 printf (" On host (after by-value): name=%s, value=%d\n " , e->name .c_str (), e->value );
129129
130- delete e;
130+ // delete e;
131131
132132 cudaDeviceReset ();
133133}
0 commit comments